Ich möchte, dass mercurial mehrere Dateien aus dem aktuellen Status des Repositorys entfernt. Ich möchte jedoch, dass die Dateien im vorherigen Verlauf vorhanden sind.
Wie kann forget
und remove
unterscheiden, und sie tun können , was ich will?
Ich möchte, dass mercurial mehrere Dateien aus dem aktuellen Status des Repositorys entfernt. Ich möchte jedoch, dass die Dateien im vorherigen Verlauf vorhanden sind.
Wie kann forget
und remove
unterscheiden, und sie tun können , was ich will?
Antworten:
' hg forget
' ist nur eine Abkürzung für ' hg remove -Af
'. Aus der ' hg remove
' Hilfe:
... und -Af können verwendet werden, um Dateien aus der nächsten Revision zu entfernen, ohne sie aus dem Arbeitsverzeichnis zu löschen.
Fazit: ' remove
' löscht die Datei von Ihrer Arbeitskopie auf der Festplatte (sofern Sie sie nicht verwenden -Af
) und ' forget
' nicht.
Der beste Weg, dies zu tun, hg forget
ist identisch mit dem hg remove
Unterschied, dass die Dateien in Ihrer Arbeitskopie zurückbleiben . Die Dateien bleiben als nicht verfolgte Dateien zurück und können jetzt optional mit einem Muster in ignoriert werden .hgignore
.
Mit anderen Worten, ich kann nicht sagen, ob Sie verwendet haben hg forget
oder hg remove
wann ich von Ihnen ziehe. Eine Datei , die Sie lief hg forget
auf wird , wenn ich zu diesem changeset aktualisieren gelöscht werden - so als ob Sie benutzt hatte , hg remove
statt.
In der Dokumentation können Sie anscheinend beide Befehle verwenden, um die Datei im Projektverlauf zu behalten. Sieht so aus, als ob Sie entfernen möchten, da dadurch auch die Datei aus dem Arbeitsverzeichnis gelöscht wird.
Aus dem Mercurial-Buch unter http://hgbook.red-bean.com/read/ :
Das Entfernen einer Datei hat keinen Einfluss auf den Verlauf. Es ist wichtig zu verstehen, dass das Entfernen einer Datei nur zwei Auswirkungen hat. Es entfernt die aktuelle Version der Datei aus dem Arbeitsverzeichnis. Es hindert Mercurial daran, Änderungen an der Datei ab dem Zeitpunkt des nächsten Commits zu verfolgen. Durch das Entfernen einer Datei wird der Verlauf der Datei in keiner Weise geändert.
Die Manpage hg (1) sagt dies über vergessen:
Markieren Sie die angegebenen Dateien, damit sie nach dem nächsten Commit nicht mehr verfolgt werden. Dadurch werden nur Dateien aus dem aktuellen Zweig entfernt, nicht aus dem gesamten Projektverlauf, und sie werden nicht aus dem Arbeitsverzeichnis gelöscht.
Und das über entfernen:
Planen Sie die angegebenen Dateien für das Entfernen aus dem Repository. Dadurch werden nur Dateien aus dem aktuellen Zweig entfernt, nicht aus dem gesamten Projektverlauf.
Wenn Sie "hg remove b"
eine Datei mit dem Status "A" verwenden, was bedeutet, dass sie hinzugefügt, aber nicht festgeschrieben wurde, antwortet Mercurial:
not removing b: file has been marked for add (use forget to undo)
Diese Antwort ist eine sehr klare Erklärung für den Unterschied zwischen Entfernen und Vergessen.
Meines Wissens nach dient dies dazu, "hg forget"
eine hinzugefügte, aber nicht festgeschriebene Datei rückgängig zu machen, damit sie nicht von der Versionskontrolle verfolgt wird. while "hg remove"
dient zum Herausnehmen einer festgeschriebenen Datei aus der Versionskontrolle.
Dieser Thread enthält ein Beispiel für die Verwendung hg remove
gegen Dateien mit 7 verschiedenen Statustypen.
Eine Datei kann nachverfolgt werden oder nicht. Sie verwenden hg add , um eine Datei zu verfolgen, und hg remove oder hg vergessen, die Nachverfolgung aufzuheben. Wenn Sie hg remove ohne Flags verwenden, wird die Datei sowohl gelöscht als auch nicht mehr verfolgt. Hg vergessen wird sie einfach entfernen, ohne sie zu löschen.