Derzeit, wenn ich git svn dcommit
git ausführen erstellt eine separate Commit in SVN für jede lokale Commit, die ich seit der letzten Synchronisierung mit SVN gemacht habe. Gibt es einen Weg für dcommit
stattdessen alle meine letzten lokalen Commits in einem Commit für SVN zu kombinieren?Kombiniere lokale Git-Commits in einen Commit für git-svn
Antwort
git rebase remotes/trunk --interactive
sollten Sie in das Menü bringen, wo Sie Commits oder quetschen sie alle in 1 verpflichten, um Ihre SVN-Repository zu vermeiden holen können verschmutzen. This ist eine wirklich gute (aber kurze) Ressource für die Arbeit mit Git-Svn.
Nein, aber Sie können alle commits ziemlich leicht zusammen quetschen. Für das folgende Beispiel, werde ich Sie auf dem master
Zweig sind, anzunehmen, zu dem entfernten trunk
Zweig entspricht, und dass Sie alle lokalen zerquetschen verpflichtet zusammen:
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
stattdessen eine temporäre Tag verwenden könnten Sie verwenden auch nur die reflog
das ist total cool, das ändert meinen Workflow komplett, vielen Dank –
Dieser arbeitete für mich (dh [email protected]{1}
anstelle von local
verwenden) - zerquetschte mehrere Commits in einem begehen und dann dcommitted zu svn:
http://www.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html
Wenn ich mit git-svn arbeite und möchte, dass eine Reihe von Git-Commits als ein einzelnes Commit angezeigt wird, arbeite ich an einem Zweig des Themas und mache dann einen Non-Fast-Forward merge
in Master vor dcommit
-ing.
Zuerst Ihr Zweig gegen svn rebase und sicher lokalen Master-Make-up-to-date ist:
git svn rebase && git push . remotes/trunk:master
Dann Master wechseln, fusionieren und dcommit:
git checkout master
git merge <branch> --no-ff -m "Message you want in svn"
git svn dcommit
Dies wird sich zeigen als ein einzelnes Commit in Subversion, aber Sie haben immer noch Ihren lokalen Verlauf, der Sie zu diesem Commit gebracht hat.
+--- Merge commit
V
svn trunk *---*---*-------------------*--- --- ---
\ /
topic branch *---*---*---*---*
Ein einfacher Weg sein könnte (falls Sie mehrere haben Commits auf dem lokalen System angehäuft):
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.
Stellen Sie sicher, dass Sie neue Dateien hinzufügen. "git commit -am" fügt keine neuen Dateien hinzu. –
Alternativ dazu können Sie mit reset --soft alle Änderungen in den Status übernehmen, so dass Sie sich keine Gedanken über das Hinzufügen von Dateien oder die Verwendung von -a machen müssen. – PeterJCLaw
, die nicht für mich arbeitet. Ich benutze merge --no-ff --no-commit
aber nach begehen, ich habe:
svntrunk 54f35e4 [trunk: ahead 336] release 1
dcommitting zu trunkwill alle 336 Commits zu begehen.
Zurücksetzen, Markieren und Quetschen wie in Antwort # 2 beschrieben: Combine local Git commits into one commit for git-svn wird funktionieren, aber beim nächsten "Merge" werden Sie einige Probleme haben, um alle Commits wieder zusammen zu bekommen!
die einzigen, die für mich funktioniert:
git checkout -tb svntrunk remotes/trunk
git merge --no-commit --squash master
alle Commits von Meister zu erhalten, ohne svn Geschichte für zukünftige zu verlieren mit dem gleichen Befehl verschmelzenden
~ Marcel
Dies scheint wie eine sehr gute Lösung. Ich verstehe nicht, was der Effekt von Fernbedienungen/Trunk im Befehl ist, das Endergebnis ist, dass alle meine Commits innerhalb des Masters zerquetscht werden. Ich hatte gehofft, sie würden nur beim Senden an SVN gequetscht werden. Nach dem Quetschen ist es notwendig, sich an SVN zu binden. –
@MacRae Linton: Alle deine Commits müssen im Master gequetscht werden. Wenn sie nicht git wären, gäbe es keine Möglichkeit, die git und svn Repositories synchron zu halten. Wenn du die letzten Änderungen neu erstellst, würde svn einen commit haben, aber in git hättest du n commits. –
@Jason Punyon: Das Problem, auf das ich stoße, ist, dass es nach dem Quetschen von Commits im Master schwierig wird, Master wieder mit meinem sich entwickelnden Zweig zu verschmelzen. So gut wie alle meine Änderungen werden zu Merge-Konflikten, was sehr mühsam ist. Ist das eine unvermeidliche Konsequenz davon, meinen sich entwickelnden Zweig vom zerquetschten Meister getrennt zu halten? –