861 Stimmen

Alle Dateien zu einer Übergabe hinzufügen, außer einer einzelnen Datei?

Ich habe eine Reihe von Dateien in einem Changeset, aber ich möchte gezielt eine einzelne geänderte Datei ignorieren. So sieht es aus nach git status :

# modified:   main/dontcheckmein.txt
# deleted:    main/plzcheckmein.c
# deleted:    main/plzcheckmein2.c
...

Gibt es eine Möglichkeit, wie ich git add aber die eine Textdatei, die ich nicht anfassen möchte, einfach ignorieren? Etwa so:

git add -u -except main/dontcheckmein.txt

1134voto

Ben Jackson Punkte 84305
git add -u
git reset -- main/dontcheckmein.txt

Hinweis : Git hat nachträglich eine spezielle Syntax für diesen Zweck hinzugefügt, die in anderen Antworten erklärt wird.

353voto

cateyes Punkte 4042

Jetzt git unterstützt exclude certain paths and files von pathspec magic :(exclude) und seine Kurzform :! . So können Sie es leicht zu erreichen, wie der folgende Befehl.

git add --all -- :!main/dontcheckmein.txt
git add -- . :!main/dontcheckmein.txt

Sie können sogar noch mehr angeben:

git add --all -- :!path/to/file1 :!path/to/file2 :!path/to/folder1/*
git add -- . :!path/to/file1 :!path/to/file2 :!path/to/folder1/*

Für Mac und Linux, umgeben Sie jeden Datei-/Ordnerpfad mit Anführungszeichen

git add --all -- ':!path/to/file1' ':!path/to/file2' ':!path/to/folder1/*'

198voto

Aquarius Power Punkte 3431

1) So ignorieren Sie Änderungen an einer einzelnen, bereits versionierten Datei

git update-index --assume-unchanged "main/dontcheckmein.txt"

und das rückgängig zu machen git update-index --no-assume-unchanged "main/dontcheckmein.txt"

github-Dokumente zum Ignorieren von Dateien

2) Um eine bestimmte Datei komplett zu ignorieren und zu verhindern, dass sie im Repository erstellt wird

Sehen Sie sich zunächst diesen Stackoverflow-Beitrag an: Git global ignorieren funktioniert nicht

.gitignore fügen Sie den relativen Pfad zur Datei ohne führende ./ .

Wenn sich Ihre Datei also unter MyProject/MyFolder/myfile.txt (wobei .git ist auch in der MyProject Ordner), fügen Sie MyFolder/myfile.txt zu Ihrem at .gitignore archivo.

Sie können bestätigen, welche Regeln mit Ignorieren verbunden sind, indem Sie git check-ignore "MyFolder/myfile.txt"

Über globales Ignorieren

Dieser Link spricht über ~/.gitignore_global aber die Datei ist mit Ihrem Projekt verbunden. Wenn Sie also das Ausschlussmuster MyFolder/myfile.txt en ~/.gitignore_global wird es funktionieren, aber nicht viel Sinn machen...

Wenn Sie hingegen Ihr Projekt mit git config core.excludesfile .gitignore donde .gitignore ist in MyProject hat die lokale Datei Vorrang vor ~/.gitignore_global die haben können sehr nützliche Regeln ...

Daher halte ich es für das Beste, ein Skript zu erstellen, mit dem Sie Ihre .gitignore con ~/.gitignore_global en .gitignore .

Eine letzte Warnung
Wenn die Datei, die Sie ignorieren wollen, bereits im Repository vorhanden ist, funktioniert diese Methode nicht, es sei denn, Sie tun dies: git rm "MyFolder/myfile.txt" Sichern Sie sie jedoch vorher, da sie auch lokal gelöscht wird! Sie können sie später zurückkopieren...

114voto

Rituraj ratan Punkte 9929

Für eine Datei

git add -u
git reset -- main/dontcheckmein.txt

Für einen Ordner

git add -u
git reset -- main/*

34voto

Nik Sumeiko Punkte 7384

Git bietet :(exclude) pathspecs-Präfix für auszuschließende Pfade.

Seine kurze magische Signatur lautet :^ .
Dokumentation: https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-exclude

git add . :^main/dontcheckmein.txt

Einige Antworten zu diesem Thema erwähnen :! was auch funktionieren würde, aber nur mit Anführungszeichen . Generell, ! gilt als schreckliches Zeichen für eine Shell-Expansion.


Wenn Sie so sind wie ich - überprüfen Sie immer, was Sie zu tun haben, indem Sie -p Flagge innerhalb der git add Befehl - :^ Auch die magische Unterschrift funktioniert wie ein Zauber:

git add -p . :^main/dontcheckmein.txt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X