Frage

Ich benutze Tortoise SVN usuallly, aber ich habe mich in Mercurial, da es ein verteiltes Versionskontrollsystem ist.

Was ich suche, in beiden Systemen ein Werkzeug, das mir nur Teile einer Datei holen lassen und sie begehen. Wenn ich jetzt dies tun will, muß ich eine temporäre Version der Datei kopieren und halte nur die Änderungen, die ich in der aktuellen Version begehen will, und dann wieder die temporäre Version auf die aktuelle Version kopieren, nachdem zu begehen. Es ist nur ein solcher Aufwand und das Programm sollte dies für mich tun können.

Ich habe gehört, Git dies unterstützt, lassen Sie es mich wissen, ob dies richtig ist.

War es hilfreich?

Lösung

Mercurial kann dies tun, mit dem Rekord Erweiterung.

Es wird Sie auffordern, für jede Datei und jeden diff großes Stück. Zum Beispiel:

% hg record
diff --git a/prelim.tex b/prelim.tex
2 hunks, 4 lines changed
examine changes to 'prelim.tex'? [Ynsfdaq?]  
@@ -12,7 +12,7 @@
 \setmonofont[Scale=0.88]{Consolas}
 % missing from xunicode.sty
 \DeclareUTFcomposite[\UTFencname]{x00ED}{\'}{\i}
-\else
+\else foo
 \usepackage[pdftex]{graphicx}
 \fi

record this change to 'prelim.tex'? [Ynsfdaq?]  
@@ -1281,3 +1281,5 @@
 %% Local variables:
 %% mode: latex
 %% End:
+
+foo
\ No newline at end of file
record this change to 'prelim.tex'? [Ynsfdaq?]  n
Waiting for Emacs...

Nach dem begehen, wird die verbleibende diff zurückgelassen werden:

% hg di
diff --git a/prelim.tex b/prelim.tex
--- a/prelim.tex
+++ b/prelim.tex
@@ -1281,3 +1281,5 @@
 %% Local variables:
 %% mode: latex
 %% End:
+
+foo
\ No newline at end of file

Alternativ können Sie es einfacher finden MQ zu verwenden (Mercurial Queues) die einzelnen Änderungen in Ihrem Repository in Patches zu trennen. Es gibt eine MQ-Variante des Datensatzes (qrecord) auch.

Update: Versuchen Sie auch die crecord Erweiterung, das stellt eine Flüche Schnittstelle zu großes Stück / Zeilenauswahl.

crecord Screenshot

Andere Tipps

Ja, git ermöglicht es Ihnen, dies zu tun. Der git add Befehl hat eine -p (oder --patch) Option, die Sie Ihre Änderungen großes Stück-für-Stück überprüfen kann, wählen Sie die Stufe (Sie auch die großen Stücke verfeinern oder bearbeiten Sie die Patches in place). Sie können auch den interaktiven Modus zu git-add (git add -i) verwenden und die "p" Option verwenden.

Hier ist ein Screencasts auf der interaktiven Zugabe, die auch die Patch-Funktion von git add zeigt.

Überprüfen Sie heraus TortoiseHG, die großes Stück Auswahl tun und lassen Sie sich verschiedene Änderungen an einer Datei zu verschiedenen Commits begehen.

Es wird sogar lassen Sie alle Änderungen an einigen Dateien begehen zusammen mit teilweise Änderungen an anderen Dateien in einem begehen.

http://tortoisehg.bitbucket.io/

Ich fragte eine ähnliche Frage nur ein Weilchen her, und die resultierende Antwort mit dem hgshelve Erweiterung wurde genau das, was ich suchte.

Bevor Sie ein Commit tun, können Sie Änderungen aus verschiedenen Dateien setzen (oder große Stücke von Änderungen innerhalb einer Datei) auf dem „Regal“ und begehen dann die Dinge, die Sie wollen. Dann können Sie die Änderungen unshelve Sie nicht begangen hat und weiter zu arbeiten.

Ich habe es in den letzten Tagen wurde verwenden und wie es eine ganze Menge. Sehr einfach zu visualisieren und zu verwenden.

Mercurial bietet nun eine Option --interactive (oder -i) an den commit Befehl, die diese Funktionalität direkt aus der Box ermöglicht.

Das funktioniert direkt von der Kommandozeile, so ist es perfekt, wenn Sie ein Kommandozeilen-Enthusiasten sind!

Ausführen

> hg commit -i

beginnt eine interaktive Sitzung, die Prüfung ermöglicht, die Bearbeitung und Aufzeichnung einzelner Änderungen ein Commit zu erstellen.

Dies verhält sich sehr ähnlich wie die --patch und --interactive Optionen für die git add und git commit Befehle.

würde ich empfehlen, nicht so zu arbeiten.

Wenn Sie auf Gruppen von Änderungen haben, stellte A, die bereit ist, zu prüfen, in und B gesetzt, die noch nicht fertig ist, wie kann man sicher sein, dass nur in der Serie A Überprüfung bricht nicht Ihre build / Tests? Sie können einige Linien vermissen, über Linien in einer anderen Datei vergessen, oder nicht eine Abhängigkeit erkennen, dass ein auf B für andere brechen die Build hat.

Ihre Commits sollten diskrete Atom Veränderungen, die die Build nicht brechen für Sie oder andere auf Sie Team. Wenn Sie teilweise zu begehen eine Datei werden Sie erheblich die Chancen zu erhöhen finden Sie die Build für andere zu brechen, ohne es zu wissen, bis Sie einen unglücklichen Mitarbeiter haben ein Klopfen an der Tür.

Die große Frage ist, warum fühlen Sie die Notwendigkeit, diese Art und Weise zu arbeiten?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top