Mój typowy git-svn pracy jest:Dlaczego polecenie git-svn dcommit zostawia duplikaty commitów w moim repozytorium git? Czy mogę to powstrzymać?
git checkout -b story-xyz
git commit -a -m "work"
git commit -a -m "more work"
git checkout master
git svn fetch
git merge remotes/trunk
git checkout story-xyz
git rebase master (sometimes with -i)
git checkout master
git merge story-xyz
W tym momencie mam moje master
i story-xyz
gałęzie wskazując samo popełnienia, popełnia jeden lub więcej przed remotes/trunk
. Wszystko od remotes/trunk
jest w jednej historii liniowej.
last svn commit [remotes/trunk] <--- work <--- more work [master, story-xyz]
I następnie uruchomić
git svn dcommit
Spodziewałem się zobaczyć zobowiązuje między remotes/trunk
i master
stają wersjami Subversion i skończyć z jednym historii liniowej z remotes/trunk
, master
i story-xyz
wszystko wskazuje na ostatni rewizja, tak jak:
last svn commit <--- work <--- more work [master, story-xyz, remotes/trunk]
Moje wersje Subversion wchodzą w porządku, ale kończę na strukturze rozgałęzionej. Wspólnym katalogiem oddziału jest Subversion HEAD, zanim popełniłem. Obie gałęzie zawierają tę samą serię zatwierdzeń, w tym sensie, że zawierają te same różnice. Oddział story-xyz
jest na czele jednej gałęzi, remotes/trunk
i master
na drugim:
last svn commit <--- work <--- more work [master, remotes/trunk]
|
\- work <--- more work [story-xyz]
git popełnia, że miałem przed uruchomieniem git svn dcommit
się na niższych gałęzi (story-xyz
), z moim git commit wiadomości, git nazwa użytkownika i adres e-mail oraz sygnatury czasowe git commit. Zatwierdzenia w górnej gałęzi są nowymi zatwierdzeniami git. Używają mojej nazwy użytkownika Subversion, znacznika czasu, kiedy uruchomiłem dcommit
, a wiadomości zatwierdzenia mają dołączone do nich pole git-svn-id
.
To wszystko jest w porządku i mogę dalej pracować. Problem polega na tym, że patrzę w gitk
i widzę, co wygląda jak niezamknięta gałąź story-xyz
. Trudno powiedzieć różnicę między gałęzią fabularną, którą połączyłem z powrotem w master
, a tą, której nie mam. Najbardziej oczywistym sposobem na jej wykrycie są zduplikowane komunikaty o zatwierdzeniu. Mogłem usunąć gałąź story-xyz
, ale wydaje mi się, że nie używam git poprawnie i straciłem część mojej historii.
Czy brakuje mi czegoś, co powstrzymałoby przed tym git-svn
? Czy jest to tylko jeden ze sposobów, w jaki interakcja z Subversion osłabia siłę i wolność git?
Dzięki, spróbuję tego dzisiaj.Wygląda na to, że to całkowicie wyeliminuje potrzebę mistrza - czy planujesz, że historia pilotów/bagażnika jest teraz naszą "główną linią" historii? –
Historia pilotów/pnia jest "główną linią" również w twoim przypadku. Spójrz na swój ostatni wykres. Historia mistrza jest taka sama jak historia pilotów/pnia. Oba są równie ważne jako "main line" - jeszcze bardziej zdalnie, ponieważ jest to _shared_ główna linia. Nie musisz całkowicie eliminować mistrza. Możesz po prostu zostawić to w zawieszeniu na jakimś wcześniejszym punkcie historii. Następnie, jeśli musisz zrobić np. jedno zatwierdzenie, możesz sprawdzić master i svn, ponownie je rozpisać na dzień dzisiejszy. –
Tak, to ma sens. Sądzę, że byłem zbyt przywiązany do idei "mistrza", która była tak wyjątkowa, że musieliśmy ją utrzymywać i być na bieżąco. Nie miałem jeszcze okazji wypróbować Twojego przepływu pracy, ale jeśli działa zgodnie z oczekiwaniami, przyjmuję odpowiedź. –