Obecnie, gdy uruchamiam git svn dcommit
git tworzy osobne zatwierdzenie w SVN dla każdego lokalnego zatwierdzenia, które wprowadziłem od ostatniej synchronizacji z SVN. Czy jest jakiś sposób, aby dcommit
połączyć wszystkie moje ostatnie lokalne zatwierdzenia w jeden commit dla SVN?Połącz lokalne zatwierdzenia Git w jedno zatwierdzenie dla git-svn
Odpowiedz
git rebase remotes/trunk --interactive
powinien zabrać Cię do menu, w którym możesz wybrać commit lub zgnieść je wszystkie w 1 commit, aby uniknąć zanieczyszczenia twojego repozytorium svn. This to naprawdę dobry (ale krótki) zasób dotyczący pracy z git-svn.
Nie, ale można łatwo zgnieść wszystkie poprawki. Na poniższym przykładzie, mam zamiar założyć, jesteś w branży master
odpowiadającej zdalnego trunk
gałęzi i że chcesz squish wszystkie lokalne zobowiązuje razem:
git tag local # create a temporary tag
git reset --hard trunk
git merge --squash local
git commit # write your single commit message here
git svn dcommit
git tag -d local # delete the temporary tag named local
Zamiast tymczasowego tag mogłeś również po prostu użyć reflog (tj użyć [email protected]{1}
zamiast local
)
to jest całkowicie fajne, to całkowicie zmienia mój przepływ pracy, wielkie dzięki –
ten pracował dla mnie - zmiażdżone kilka commity w jeden commit a następnie dcommitted do svn:
http://www.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html
Kiedy pracuję z git-svn i chcę serii zatwierdzeń git, które pojawiają się jako pojedyncze zatwierdzenia, pracuję nad gałęzią tematów, a następnie wykonuję niekodowane szybkie przekształcenie merge
w master przed dcommit
-ing.
pierwsze, zmieniają bazę swój oddział przeciwko svn i upewnij się, miejscowy mistrz jest up-to-date:
git svn rebase && git push . remotes/trunk:master
Następnie przełączyć do opanowania, scalania i dcommit:
git checkout master
git merge <branch> --no-ff -m "Message you want in svn"
git svn dcommit
To pokaże się jako pojedyncze zatwierdzenie w Subversion, ale nadal będziesz mieć swoją lokalną historię, która doprowadziła cię do tego zatwierdzenia.
+--- Merge commit
V
svn trunk *---*---*-------------------*--- --- ---
\ /
topic branch *---*---*---*---*
Prostszym sposobem mogłoby być (jeśli masz kilka zobowiązuje spiętrzone w systemie lokalnym):
git reset <hash tag of commit till which u need to combine>
git commit -am "your message" // This will create one clubbed commit of all the commit till the hash tag used.
Upewnij się, że dodajesz nowe pliki. "git commit -am" nie dodaje nowych plików samodzielnie. –
Alternatywnie, przy użyciu opcji reset --soft pozostawi zmiany wszystkie etapami, dzięki czemu nie musisz się martwić o dodawanie plików lub używanie -a. – PeterJCLaw
że nie pracuje dla mnie. Używam merge --no-ff --no-commit
ale po popełnić, mam:
svntrunk 54f35e4 [trunk: ahead 336] release 1
dcommitting do trunkwill popełnić wszystkie 336 zobowiązuje.
resetowanie, oznaczanie i zgniatanie, jak opisano w odpowiedzi # 2: Combine local Git commits into one commit for git-svn będzie działać, ale przy następnym "scaleniu" będziesz miał kłopot, aby ponownie zebrać wszystkie poprawki!
jedynym, który pracuje dla mnie:
git checkout -tb svntrunk remotes/trunk
git merge --no-commit --squash master
uzyskać wszystkie zobowiązuje od mistrza do svn bez utraty historia dla przyszłości połączenia z tego samego polecenia
~ Marcel
Wydaje się to jak bardzo dobre rozwiązanie. Nie rozumiem, jaki jest wpływ pilota/pnia w poleceniu, a wynikiem końcowym jest to, że wszystkie moje commashed zostały zmiażdżone wewnątrz mistrza. Miałem nadzieję, że zostaną zgnieceni tylko przy wysyłaniu do SVN. Konieczne jest zatwierdzenie SVN po wykonaniu zgniatania. –
@MacRae Linton: Wszystkie twoje zobowiązania muszą zostać zgniecione w mistrzu. Gdyby nie git, nie mieliby możliwości zsynchronizowania repozytoriów git i svn. Kiedy przebijesz się, by wyciągnąć najnowsze zmiany, svn miałoby jeden commit, ale w git miałbyś n commitów. –
@Jason Punyon: Kwestia, na którą napotykam, polega na tym, że po zmiażdżeniu popełnianym przez mistrza staje się trudne ponowne połączenie mistrza z moją rozwijającą się gałęzią. Prawie wszystkie moje zmiany stają się konfliktami seryjnymi, z którymi trzeba sobie poradzić. Czy jest to nieuniknioną konsekwencją oddzielenia mojej rozwijającej się gałęzi od zmiażdżonego pana? –