GIT Checkout außer einem Ordner

8

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?

    
Aminadav 26.11.2015, 08:25
quelle

1 Antwort

14

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 :

%Vor%

Dann fügen Sie den Pfad node_modules als Negation in der Datei .git/info/sparse-checkout hinzu:

%Vor%

Dies erstellt eine Datei namens sparse-checkout containing:

%Vor%

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:

%Vor%

Sie können das Sparse-Checkout dann ganz deaktivieren, indem Sie seine Konfigurationsvariable auf false :

setzen %Vor%

Beachten Sie, dass sparse checkout zuerst in Git 1.7.0 .

    
Enrico Campidoglio 26.11.2015, 09:12
quelle

Tags und Links