Ich möchte zu einem anderen Zweig oder einem früheren Commit auschecken, aber ich möchte einen Ordner die gleichen Dateien behalten (den Ordner nicht auschecken).
Ich möchte, dass der Ordner in git status
angezeigt wird, damit ich diesen Ordner jetzt zum Index hinzufügen kann.
Zum Beispiel habe ich einen Ordner mit node_modules
. Ich möchte, dass der Ordner in allen meinen Commits enthalten ist (ich weiß, dass die meisten Leute es vorziehen, den Ordner node_modules
zu vergiften). Aber wenn ich zu einem anderen Commit oder anderen Checkout-Zweig übergehe, möchte ich, dass git
den Ordner node_modules
nicht berührt.
Ist es möglich?
Sie können sparse checkout verwenden, um die festgeschriebenen Inhalte des Verzeichnisses node_modules
von auszuschließen der Arbeitsbaum. Wie die Dokumentation sagt:
"Sparse-Checkout" ermöglicht das spärliche Auffüllen des Arbeitsverzeichnisses. Es verwendet das Bit
skip-worktree
, um Git mitzuteilen, ob sich eine Datei im Arbeitsverzeichnis lohnt.
So verwenden Sie es. Zuerst aktivieren Sie die Option sparseCheckout
:
Dann fügen Sie den Pfad node_modules
als Negation in der Datei .git/info/sparse-checkout
hinzu:
Dies erstellt eine Datei namens sparse-checkout
containing:
was bedeutet, dass das Verzeichnis node_modules
ignoriert, wenn ein Commit-Baum in das Arbeitsverzeichnis eingelesen wird.
Wenn Sie später das Verzeichnis node_modules
erneut einfügen möchten (dh entfernen Sie das skip-worktree
bit aus seinen Dateien) müssen Sie die Datei sparse-checkout
so ändern, dass sie nur /*
enthält - also "alle Pfade einschließen" - und Ihr Arbeitsverzeichnis mit git read-tree
aktualisieren:
Sie können das Sparse-Checkout dann ganz deaktivieren, indem Sie seine Konfigurationsvariable auf false
:
Beachten Sie, dass sparse checkout zuerst in Git 1.7.0 .
Tags und Links git git-checkout