Mam projekt, w którym początkowo używałem submodułów dla kodu zależnego. Okazuje się, że submoduły nie są odpowiednie dla tego projektu (i są trudne do zastosowania w praktyce), więc zamieniam każdy moduł częściowy na poddrzewo (przy użyciu nowej funkcji git-subtree
).Błąd łączenia po przekonwertowaniu modułu podrzędnego Git do poddrzewa
W moim roboczym repozytorium pomyślnie usunąłem każdy moduł pomocniczy i dodałem stare repozytorium częściowe jako poddrzewo. Nie ma problemu z tym.
Kiedy udać się do innego klonu i próbować wyciągnąć z pierwszego, pojawia się następujący błąd na etapie scalania:
error: The following untracked working tree files would be overwritten by merge:
sub/.gitignore
sub/Makefile
sub/README
sub/src/main.c
... and so on for all files in sub/
Aborting
Wydaje się, że to dlatego, że pliki w sub/
naprawdę nigdy nie istniał główne repozytorium, a kiedy Git stosuje łatę do aktualizacji .gitmodules
, nie usuwa katalogu z plikami modułów. Podczas przetwarzania następnego zatwierdzenia, w którym Git próbuje utworzyć nowe pliki, które są teraz częścią głównego repozytorium, wszystkie te pliki kolidują z wciąż istniejącymi plikami w sub/
.
Rozwiązanie, które znalazłem, to użycie rm -rf sub
przed git pull
, co pozwala uniknąć tego problemu.
Moje pytanie brzmi: czy istnieje przełącznik linii poleceń, z którego można korzystać pod numerem git merge
z napisem "Zastąp wszystkie pliki, które istnieją w katalogu roboczym"? Jeszcze lepiej będzie funkcja, w której git merge
będzie wyglądać zawartość istniejącego pliku, a jeśli zawartość jest identyczna z pliku, który miał utworzyć mimo to, pomiń komunikat o błędzie i kontynuować.
UPDATE: Stworzyłem repozytoriów Git, które pokazują ten problem, aby pokazać dokładnie to, co mówię. Aby odtworzyć:
$ git clone https://github.com/ghewgill/q14224966.git
$ cd q14224966
$ git submodule init
$ git submodule update
$ git merge origin/branch
ta powinna skutkować komunikatem o błędzie
error: The following untracked working tree files would be overwritten by merge:
sub/Makefile
sub/README
sub/src/main.c
Please move or remove them before you can merge.
Aborting
Próbowałeś to: http://goo.gl/z1XP9? – Efthymis
@Eththisis: Pełny link to http://stackoverflow.com/questions/1295171/git-merge-to-master-while-automatically-choosing-to-overwrite-master-files-with (proszę nie używać adresu URL skróty tutaj). Próbowałem 'git merge -s recursive -X ich origin/master' i wystąpił ten sam błąd. –
Przepraszam za to – Efthymis