Mam superprojekt git, który odwołuje się do kilku podmodułów i próbuję zablokować przepływ pracy, aby reszta członków mojego projektu mogła pracować.
W przypadku tego pytania powiedzmy, że wywoływany jest mój superprojekt supery
i podmoduł subby
. (Dalej jest uproszczenie tego, co próbuję zrobić ... Właściwie nie używam gałęzi do wersji, ale pomyślałem, że najłatwiej będzie to ułożyć jako pytanie.)
Moja główna gałąź supery
ma znacznik v1.0
projektu git, do którego subby
odwołuje się moduł podrzędny. Oddział supery
o nazwie one.one
i zmienił nazwę z modułem do punktu do znacznika v1.1
z subby
.
Mogę bez problemu pracować w każdej z tych gałęzi, ale jeśli spróbuję zaktualizować one.one
gałąź o zmiany zmaster
gałęzi, pojawiają się konflikty i nie wiem, jak je rozwiązać.
Zasadniczo po uruchomieniu git pull . master
w subby
gałęzi wygląda na to, że tworzy dodatkowe podmoduły.
Przed łóżkiem / scalania, uzyskać pożądaną odpowiedź git submodule
z one.one
branży:
$ git checkout master
$ git submodule
qw3rty...321e subby (v1.0)
$ git checkout one.one
$ git submodule
asdfgh...456d subby (v1.1)
Ale po ściągnięciu dodaje dodatkowe podmoduły, gdy uruchamiam git submodule
:
$ git pull . master
Auto-merged schema
CONFLICT (submodule): Merge conflict in subby - needs qu3rty...321e
Automatic merge failed; fix conflicts and then commit the results.
$ git submodule
qw3rty...321e subby (v1.0)
asdfgh...456d subby (v1.1)
zxcvbn...7890 subby (v1.1~1)
Jak usunąć / zignorować niechciane odniesienia do podmodułów i zatwierdzić moje konflikty i zmiany? A może istnieje parametr, którego mogę użyć z oryginałem git pull
, który ignoruje moje moduły podrzędne?
źródło
added by us: ../Mono.Cecil
sięgit status
jednakgit add
igit rm
nie powiodło sięMono.Cecil: needs merge, pathspec 'Mono.Cecil/' did not match any files
, ponieważ był tylko pusty folder i git naprawdę tylko pliki uchwyty.git checkout
dał miMono.Cecil: needs merge, error: you need to resolve your current index first
,git submodule update
dałSkipping unmerged submodule Mono.Cecil
igit checkout master Mono.Cecil
WRESZCIE to naprawiłem. Podstawowy problem:git status
sugestia jest błędna, więc wybierz gałąź i zabierz jej kopię folderucheckout
!git checkout --ours SUBMOD
igit add SUBMOD
i inni, ale w końcu robigit checkout master SUBMOD
stałe konflikt. Ten komentarz powinien być prawdopodobnie odpowiedzią, a nie komentarzem ... :)Cóż, technicznie nie zarządza konfliktami z modułami podrzędnymi (tj: zachowaj to, ale nie tamto), ale znalazłem sposób, aby kontynuować pracę ... i wszystko, co musiałem zrobić, to zwrócić uwagę na moje
git status
wyjście i zresetować moduły podrzędne:Spowoduje to zresetowanie modułu podrzędnego do zatwierdzenia przed ściągnięciem. Co w tym przypadku jest dokładnie tym, czego chciałem. A w innych przypadkach, w których potrzebuję zmian zastosowanych w module podrzędnym, zajmę się tymi ze standardowymi przepływami pracy podmodułu (wzorzec kasy, ściągnij żądany tag itp.).
źródło
Trochę zmagałem się z odpowiedziami na to pytanie i nie miałem też szczęścia z odpowiedziami w podobnym poście SO . A więc to właśnie zadziałało - pamiętając, że w moim przypadku submoduł był utrzymywany przez inny zespół, więc konflikt pochodził z różnych wersji submodułu w master i mojej lokalnej gałęzi projektu, nad którym pracowałem:
git status
- zanotuj folder podmodułu z konfliktamiZresetuj podmoduł do wersji, która została ostatnio zatwierdzona w bieżącej gałęzi:
git reset HEAD path/to/submodule
W tym momencie masz wolną od konfliktów wersję swojego modułu podrzędnego, którą możesz teraz zaktualizować do najnowszej wersji w repozytorium modułu podrzędnego:
A teraz możesz to zrobić
commit
i wrócić do pracy.źródło
Najpierw znajdź skrót, do którego chcesz odwoływać się w swoim module podrzędnym. następnie uruchomić
Pomogło mi to w doprowadzeniu mojego modułu podrzędnego do prawidłowego odniesienia skrótu i kontynuowaniu pracy bez dalszych konfliktów.
źródło
Miałem ten problem z
git rebase -i origin/master
oddziałem. Chciałem wziąć podmoduł w wersji master, więc po prostu zrobiłem:git reset master path/to/submodule
i wtedy
git rebase --continue
To rozwiązało problem.
źródło
Otrzymałem pomoc w tej dyskusji. W moim przypadku
pracował dla mnie :)
źródło
W moim katalogu nadrzędnym widzę:
Więc właśnie to zrobiłem
źródło