Git: Verfolgte Dateien ignorieren

178

Ich habe einige nachverfolgte Dateien in einem Repository, die beim Erstellen des Codes automatisch geändert werden. Ich möchte sie nicht entfernen, ich möchte nur nicht, dass sie als geändert angezeigt werden, und ich möchte nicht, dass sie inszeniert werden, wenn ich etwas hinzufüge.

Ist das möglich?

Haymansfield
quelle
7
Mögliches Duplikat von Git: Kann ich eine Datei festschreiben und die Inhaltsänderungen ignorieren?
Ciro Santilli 法轮功 冠状 病 六四 事件 20
5
Wenn diese Dateien vom Build automatisch generiert werden, sollten sie nicht in Git verfolgt werden.
Codebling
Hier ist ein kurzes Tutorial über Gitignore, das Sie vielleicht nützlich finden: learningpassion.wordpress.com/2016/06/17/…
Joker

Antworten:

279

Sicher.

git update-index --assume-unchanged [<file> ...]

So machen Sie das Tracking rückgängig und starten es erneut:

git update-index --no-assume-unchanged [<file> ...]
Nick Veys
quelle
3
Was passiert mit Dateien in diesem Zustand, wenn ich Änderungen daran vornehme?
Haymansfield
2
@ Haymansfield Die Hilfeseite für den Befehl sagt FolgendesGit will fail (gracefully) in case it needs to modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is changed upstream, you will need to handle the situation manually.
Parham
3
Wie kann --assume-unchangedich mich beim Klonen bewerben ? Damit alle Benutzer die Dateien haben, aber keine lokalen Änderungen an ihnen in Diffs sehen.
Gauthier
9
@ Tyler - Nein, sobald eine Datei von git verfolgt wird, wird sie immer verfolgt, auch wenn diese Datei in einem .gitignore angezeigt wird. Mein Anwendungsfall ist so etwas wie "Hier ist eine Basisvorlage einer Datei, in der Sie Ihre Anmeldeinformationen speichern und jetzt niemals festschreiben würden".
Jon V
5
@watbywbarif Ich habe den Befehl git update-index --no-assume-unchanged $(git ls-files $(git rev-parse --show-toplevel))als Git-Alias ​​festgelegt. Immer wenn ich vermute, dass es einige dieser Spielereien sind, mache ich das einfach.
Philippe Carphin
5

Eine andere Lösung mit Git-Attributen und% f im Filterbefehl:

git config filter.orig.clean "cat %f.orig"
cp filename filename.orig
echo "filename filter=orig" >> .git/info/attributes
echo "filename.orig" >> .git/info/exclude
koct9i
quelle
16
Könnten Sie näher erläutern, was dies bedeutet und was es zufällig tut?
Rogerdpack
Dies fügt einen Filter für eine Datei hinzu, die Inhalte aus einer ".orig" -Datei liest, die Originaltext enthält
koct9i
5

Ein anderer Ansatz (aus einer jetzt gelöschten Antwort von Seth Robertson, aber ich fand sie hilfreich, um sie wiederzubeleben) besteht darin, eine "verfolgte" Vorlagendatei zu verwalten und dann eine lokale, nicht verfolgte Version davon zu haben, z. B. "config.sample.ini" oder " config.ini.template " Ein vollständiges Beispiel finden Sie unter https://gist.github.com/canton7/1423106 .

Dann gibt es keine Bedenken, wenn die Datei innerhalb von git usw. geändert wird und Sie .gitignore (endlich) für die lokalen nicht verfolgten Dateien verwenden können.

Rogerdpack
quelle