W moim projekcie potrzebuję użyć kodu strony trzeciej, przechowywanego w kilku repozytoriach Git. Mój projekt jest również przechowywany w (oddzielnym) repozytorium Git. W głównym projekcie pracuje ze mną kilka osób, a ja jestem opiekunem.Git submodules workflow
We wcześniejszych projektach kopiowałem zależności ręcznie do drzewa roboczego Git, dodając niewielki plik określający wersję, której używam.
Teraz jest to dość niewygodne, ponieważ muszę codziennie aktualizować jedną z zależności i często wnosić do niej kod, w większości przypadków w połączeniu ze zmianami w głównym projekcie.
Postanowiłem wypróbować podmoduły Git w celu zarządzania. Im więcej ich próbuję, tym bardziej jestem sfrustrowany. Wydaje się nawet, że ręczna kopia jest być może lepsza.
Oto niektóre z moich obaw:
- Jesteśmy już w stanie uzyskać spójnego stanu repozytorium za pomocą jednego polecenia (
git checkout
teraz potrzebujegit submodule update --init
). - Nie jesteśmy w stanie prawidłowo używać niektórych narzędzi Git (
git archive
jest najbardziej zauważalny). - Nie jesteśmy w stanie zobaczyć zmian stanu/różnic w submodułach z głównego projektu.
- Jak już znalazłem w trudny sposób,
git submodule
nie działa z opcjami--git-dir
i--work-tree
i wymaga fizycznej zmiany katalogu bieżącego do "poziomu roboczego drzewa".
Wygląda na to, że aby usprawnić nasz proces pracy podmodułów (czyli jedną operację == jedno polecenie), musimy napisać dość grube opakowanie wokół Gita. To jest smutne.
Należy zauważyć, że nie jest opcją odejście od Git lub scalenie projektu podprojektu w całości z głównym projektem.
Być może używam git submodules
w niewłaściwy sposób? Czy istnieje jakiś dobry samouczek dotyczący przepływu pracy?
Proszę mówić, nawet jeśli nie znasz właściwej odpowiedzi, ale podziel się moimi obawami. :-)
Jeden z moich ulubionym Submoduły pułapek jest, jeśli usunąć submodule i zastąpić go nowym modułem w tym samym miejscu, to łamie repozytorium dla każdego innego. (np. Ktoś podaje bibliotekę na githubie, a zamiast tego zmienia moduł częściowy na punkt na widelcu). Obejście problemu polega na usunięciu modułu częściowego, zmobilizowaniu wszystkich i aktualizacji, a następnie zastąpieniu modułu częściowego i umożliwieniu każdemu ciągnięcia i ponownej aktualizacji. –
Myślałem, że ktoś ukradł ten post i opublikował go na habr bez odniesienia, ale wtedy spojrzałem na nazwę ... :-D Mimo to, odniesienie do SO byłoby miłe, jak sądzę. –
Jest jeden.Przyjrzyj się bliżej linkom w tekście. –