2009-08-20 13 views
17

Wcześniej używaliśmy wielu submodułów w naszych głównych repozytoriach, ale aby zwiększyć łatwość obsługi naszych projektów, uruchomiliśmy eksperymentalną gałąź, w której zastąpiliśmy je wszystkimi poddrzewami.Git mylić, łącząc aktualizację z moim poddrzewem

To działało dobrze - ale teraz, gdy próbuję zaktualizować jedną z poddrzew, błędnie łączy aktualizację w całkowicie nieprawidłowy katalog, który nie jest nawet poddrzewem.

główny magazyn, w którym gałąź „Poddrzewo” zawiera gałąź doświadczalny, jest git: //github.com/hugowetterberg/goodold_drupal.git

repozytorium do łączenia w aktualizacji z: git : //github.com/voxpelli/drupal-oembed.git

Scalanie wykonując: git merge -s poddrzewie interfejsu oEmbed/Master

ścieżka aktualizacje powinny być połączone w: sites/all/modules/interfejsu oEmbed/

ścieżce są one połączone w: modułów/agregator/Tłumaczenia/

Każdy mający pojęcia jak pobrać aktualizacje do poddrzew lub co Błąd może być?

Odpowiedz

18

Niestety jest to błąd (lub brak funkcji) w kodzie "git merge -s subtree". W rzeczywistości to poddrzewa, które chcesz scalić. Zwykle to magicznie się okazuje, ale jeśli twoje poddrzewo zawiera wiele zmian (lub było pierwotnie puste, lub coś w tym rodzaju), może to zakończyć się niepowodzeniem.

Najlepszym sposobem, aby obejść to jest:

  1. Scalanie plików jak to było wyżej.

  2. Ręcznie przenieś wszystkie pliki wynikowe do miejsca, w którym zostały usunięte .

  3. git commit -a --amend aby poprawić zatwierdzenie scalenia.

Prawdopodobnie fajerwerki na przyszłość będą działać poprawnie, chyba że katalog ten będzie nieustannie w niewiarygodnych ilościach.

Komenda eksperymentalny „git subtree” ma parametr --prefix że powinno się pozwolić ją zmienić, ale niestety to nie działa w tej chwili (ponieważ wymaga pracy całego „poddrzewa git merge -s” cechy i nie ma czas to zrobić).

W każdym razie sytuacja powinna być rzadkością, a obejście tego problemu nie będzie potrzebne, nawet w przypadku przyszłych połączeń tego samego projektu.

+7

Właśnie tutaj łatka do git, która pozwoli ci zastąpić sub drzewo jawnie używające tej opcji "-Xsubtree =" i zostało zaakceptowane. Poszukaj go w git 1.7.0 lub tak. – apenwarr

+2

Po wprowadzeniu pojedynczego folderu z repozytorium źródłowego (np. 'Git read-tree --prefix = dest/-u source_repo/master: folder_in_repo /') zamiast całego obiektu, scalanie nawet niewielkich zmian z powrotem do repo wydaje się aby cały folder został umieszczony w nowej lokalizacji w repozytorium (tj. duplikacji). –

+0

Niezbyt rzadka sytuacja :-( –