Mercurial (hg) schreibt nur bestimmte Dateien fest


119

Ich versuche, nur bestimmte Dateien mit Mercurial festzuschreiben. Da hg bei jedem Versuch, eine Änderung festzuschreiben, automatisch hinzugefügt wird, möchte es alle Dateien festschreiben. Aber das will ich nicht, weil bestimmte Dateien noch nicht "fertig" sind.

Es gibt

hg commit -I thefile.foo

Dies ist jedoch nur für eine Datei. Der bessere Weg für mich wäre, wenn ich das automatische Hinzufügen wie in Git deaktivieren könnte. Ist das möglich?


5
Datensatzerweiterung verwenden? oder Sie können Dateien in der Befehlszeile angebenhg ci foo bar baz
tonfa

4
@tonfa, poste deinen Kommentar als Antwort neu
Andrei Dziahel

Bitte zerstören Sie Ihre Beiträge nicht.
Glorfindel

Warum zerstörst du so einen netten Fragesteller?
Praveen Kumar Purushothaman

Antworten:


155

Sie können die Dateien in der Befehlszeile angeben, wie tonfa schreibt:

$ hg commit foo.c foo.h dir/

Das funktioniert einfach und das mache ich die ganze Zeit. Sie können das gefundene --includeFlag auch verwenden und es mehrmals wie folgt verwenden:

$ hg commit -I foo.c -I "**/*.h"

Sie können sogar eine Dateigruppe verwenden , um die Dateien auszuwählen, die Sie festschreiben möchten:

$ hg commit "set:size(1k - 1MB) and not binary()"

Es gibt keine Einstellung, die das Verhalten beim automatischen Hinzufügen deaktiviert und Mercurial so funktioniert wie Git. Die mq-Erweiterung könnte jedoch von Interesse sein. Das ist eine erweiterte Erweiterung, aber Sie können dies tun

$ hg qnew feature-x     # create new patch
$ hg qrefresh -s foo.c  # add a file to the current patch
$ hg qrefresh -s bar.c  # add another file to the patch
$ hg qfinish -a         # convert applied patches to normal changesets

Ich benutze MQ für diesen Zweck jedoch nicht wirklich selbst, da ich denke, dass es ausreicht, nur die Dateinamen in der Befehlszeile anzugeben.


Welches Verhalten beim automatischen Hinzufügen von Verhalten? Hat hg Dateien automatisch hinzugefügt? Denn jetzt müssen Sie dies explizit tun, sonst werden sie nicht mehr verfolgt.
Mpen

1
@mpen Ich denke, er meint, wie gh automatisch jede geänderte Datei zu einem Commit hinzufügt, im Gegensatz zu git, bei dem Sie geänderte Dateien manuell zum nächsten Commit hinzufügen müssen, und einige geänderte Dateien nicht
festgeschrieben werden

24

Wenn Sie einige Dateien festschreiben und viele andere ausschließen möchten, listen Sie die Dateien, die Sie festschreiben möchten, explizit auf. -Iwird nur benötigt, wenn Sie Muster anstelle von Dateien verwenden möchten.

Wenn Sie viele Dateien festschreiben und nur wenige Dateien ausschließen möchten, ist die Verwendung -Xbequemer.

Wenn beispielsweise ein Repository mit "file_1", "file_2" und "file_3" angegeben ist, sind die folgenden äquivalent, letzteres ist jedoch einfacher / schneller einzugeben:

hg commit file_1 file_2
hg commit -X file_3

8

Ab 3.8 können Sie auch hg commit --interactivedie Dateien auswählen (vor 3.8 können Sie die crecord-Erweiterung für ähnliche Funktionen verwenden). Das --interactive(oder nur -i) Flag veranlasst hg, Sie zur Eingabe der Dateien aufzufordern, die Sie in das Commit aufnehmen möchten. Als zusätzlichen Bonus können Sie sogar Blöcke in die Dateien einschließen / ausschließen.

Hier ist ein Beispiel dafür, wie die Benutzeroberfläche aussieht. Beachten Sie, dass dies ein alter Screenshot ist (eigentlich von crecord), sodass sich die Benutzeroberfläche geringfügig geändert hat (die Grundlagen sind jedoch dieselben). crecord Screenshot

Beachten Sie, dass Sie die Curses-Schnittstelle aktivieren müssen, um diese Schnittstelle zu erhalten. Sie können dies für einen einzelnen Lauf mit hg commit --config ui.interface=curses --interactiveoder allgemein tun, indem Sie Folgendes zu Ihrem hinzufügen .hgrc:

[ui]
interface = curses
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.