In diesem Fall habe ich zwei unabhängige Änderungen in einer Datei vorgenommen: z. fügte eine neue Methode hinzu und änderte eine andere Methode.
Ich möchte oft nicht beide Änderungen als ein Commit festschreiben, sondern als zwei unabhängige Commits.
In einem Git-Repository würde ich den interaktiven Modus von Git-Add (1) verwenden , um das Stück in kleinere aufzuteilen :
git add --patch
Was ist der einfachste Weg, dies mit Subversion zu tun? (Vielleicht sogar mit einem Eclipse-Plug-In)
Update:
In The Thing About Git nennt Ryan es: "The Tangled Working Copy Problem".
Antworten:
Mit git-svn können Sie ein lokales GIT-Repository des Remote-SVN-Repositorys erstellen, mit dem vollständigen GIT-Funktionsumfang (einschließlich Teil-Commits) damit arbeiten und dann alles zurück in das SVN-Repository verschieben.
git-svn (1)
quelle
Tortoise SVN 1.8 unterstützt dies jetzt mit der Funktion "Nach Festschreiben wiederherstellen". Auf diese Weise können Sie Änderungen an einer Datei vornehmen, wobei alle Änderungen nach dem Festschreiben rückgängig gemacht werden
Gemäß der Dokumentation:
quelle
Ich habe dies mit TortoiseSVN gemacht .
Mit dem integrierten Dienstprogramm zum Zusammenführen können Sie einen Unterschied zwischen der Repository-Version und Ihrer Arbeitskopie anzeigen.
Verwenden Sie die Funktion zum Erstellen eines Backups des Dienstprogramms diff
Sie sollten jetzt alle Ihre Änderungen mit zwei separaten Festschreibungen festschreiben lassen.
quelle
Versuchen Sie es mit
svn diff > out.patch
und kopieren Sie dieout.patch
Datei nachout.patch.add
undout.patch.modify
Nur wenn Sie eine funktionierende Patch-Datei haben, können Sie die Originaldatei mit zurücksetzen
svn revert out.c
.Bearbeiten Sie die Patch-Dateien von Hand, sodass sie nur die Hunks zum Hinzufügen oder Ändern enthalten. Wenden Sie sie mit dem
patch
Befehl auf die Originaldatei an , testen Sie, ob die Addition funktioniert hat, und dannsvn commit
die Addition.Waschspülung für das
out.patch.modify
Pflaster wiederholen .Wenn die Änderungen in der Datei getrennt sind, wie in Ihrer ersten Frage angegeben - eine neue Methode hinzugefügt, eine vorhandene Methode geändert -, funktioniert dies
Dies ist eine sehr langwierige Lösung - obwohl ich nicht überzeugt bin, dass Sie einen Grund haben sollten, Ihre Commits zu trennen.
Sie hätten auch mehrere Arbeitskopien derselben Quelle auschecken können, um Ihre Arbeit gegen Folgendes anzuwenden:
Stellen Sie sicher
svn up
und testen Sie, um sicherzustellen, dass alles in Ordnung ist.quelle
Dies ist mit TortoiseSvn (Windows) seit Version 1.8 möglich.
Unter Linux würde ich http://webstaff.itn.liu.se/~karlu20/div/blog/2013-05-31_SVNPartialCommit.php ausprobieren. Ich habe es aber nicht selbst ausprobiert.
quelle
Ich habe das gemacht:
Dies ist ein vereinfachter Ansatz, bei dem davon ausgegangen wird, dass eine Reihe von Änderungen relativ einfach rückgängig gemacht werden kann. In komplexeren Situationen würde ich beide Änderungen aufgeben und festschreiben, ohne mir darüber Sorgen zu machen.
Jetzt, wo ich Git benutze, hoffe ich, dass ich das nie wieder tun muss!
quelle
Ich verwende entweder ein lokales Darcs-Repo oder füge die Änderungen nach und nach zusammen. Beim Zusammenführen (opendiff öffnet FileMerge, ein Zusammenführungsprogramm, das mit Xcode geliefert wird; ersetzen Sie es durch Ihr bevorzugtes Zusammenführungswerkzeug):
Führen Sie die zugehörigen Änderungen zusammen, speichern Sie die Zusammenführung und beenden Sie das Zusammenführungsprogramm
Wenn mehr als ein nicht verwandtes Stück in der Datei enthalten ist, spülen Sie es aus und wiederholen Sie es (aber warum sollten Sie so lange warten, bevor Sie es festschreiben?!)
Wenn Sie git kennen, können Sie mit git-svn ein lokales git-Repo verwalten und Ihre Commits mit einem svn-Masterserver synchronisieren. funktioniert gut in meiner begrenzten Erfahrung.
quelle
Probieren Sie VisualSVN für Visual Studio aus . In der neuesten Version 6.1 wird die QuickCommit-Funktion eingeführt. Sie können ausgewählte Änderungen in einer Datei teilweise mit den neuen Kontextmenübefehlen Commit this Block und Commit Selection im Visual Studio-Editor festschreiben.
quelle
Es ist etwas riskanter als Spikes vollständiger Vorschlag, kann aber einfacher sein. Stellen Sie außerdem sicher, dass Sie es zuerst mit etwas anderem versuchen, da einige Editoren sich weigern, eine Datei zu speichern, die sich unter ihnen geändert hat, es sei denn, Sie laden diese Datei neu (wobei alle Änderungen verloren gehen).
quelle
Ich denke, eine einfachere Option als das Generieren von Diff-Dateien, das Zurücksetzen usw. wäre, zwei Kopien des Repositorys auszuchecken und ein visuelles Diff-Tool wie DeltaWalker zu verwenden, um Hunks von einem zum anderen zu kopieren.
Die erste Kopie wäre die, an der Sie tatsächlich arbeiten, und die zweite wäre nur für diesen Zweck. Sobald Sie eine Menge Änderungen am ersten vorgenommen haben, können Sie einen Abschnitt in den zweiten kopieren, festschreiben, einen anderen Abschnitt kopieren, festschreiben usw.
quelle
svn diff
.svn revert
.patch
Tool oder durch manuelle Bearbeitung oder was auch immer erneut an.diff
anschließend aus, um Ihre Arbeitskopie mit Ihrem Backup zu vergleichen und sicherzustellen, dass Sie die Patch-Teile korrekt angewendet haben.quelle