wake-up-neo.com

Wie konfiguriere ich git, um einige Dateien lokal zu ignorieren?

Kann ich Dateien lokal ignorieren, ohne die globale Git-Konfiguration für alle anderen zu verschmutzen? Ich habe nicht verfolgte Dateien, die in meinem Git-Status Spam sind, aber ich möchte keine Änderungen an der Git-Konfiguration für jede einzelne zufällige nicht verfolgte Datei vornehmen, die ich in meinen lokalen Filialen habe.

1184
Bjorn Tipling

From die relevante Git-Dokumentation :

Muster, die für ein bestimmtes Repository spezifisch sind, aber nicht mit anderen verwandten Repositorys geteilt werden müssen (z. B. Hilfsdateien, die sich im Repository befinden, aber für den Arbeitsablauf eines Benutzers spezifisch sind), sollten in die Datei $GIT_DIR/info/exclude aufgenommen werden.

Die .git/info/exclude -Datei hat dasselbe Format wie jede .gitignore -Datei. Eine andere Möglichkeit besteht darin, core.excludesFile auf den Namen einer Datei zu setzen, die globale Muster enthält.

Beachten Sie, dass Sie nach dem Bearbeiten Ihrer Ignoriermuster Folgendes ausführen müssen, wenn Sie bereits nicht bereitgestellte Änderungen vorgenommen haben:

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

Hinweis zu $GIT_DIR: Dies ist eine Notation, die alles in allem im Git-Handbuch verwendet wird, um nur den Pfad zum anzugeben Git-Repository. Wenn die Umgebungsvariable gesetzt ist, überschreibt sie die Position des Repos, in dem Sie sich befinden, was wahrscheinlich nicht Ihren Wünschen entspricht.

1620
Josh Lee

Update : Verwenden Sie stattdessen git update-index --skip-worktree [<file>...], danke @danShumway! Siehe Borealids Erklärung zum Unterschied der beiden Optionen .


Alte Antwort:

Wenn Sie lokale Änderungen an nachverfolgten Dateien ignorieren müssen (wir haben diese mit lokalen Änderungen an Konfigurationsdateien), verwenden Sie git update-index --assume-unchanged [<file>...].

413
Florian Sesser

Fügen Sie dem Abschnitt [alias] Ihrer .gitconfig-Datei die folgenden Zeilen hinzu

ignore = update-index --assume-unchanged
unignore = update-index --no-assume-unchanged
ignored = !git ls-files -v | grep "^[[:lower:]]"

Jetzt können Sie git ignore my_file verwenden, um Änderungen an der lokalen Datei zu ignorieren, und git unignore my_file, um das Ignorieren der Änderungen zu beenden. git ignored listet die ignorierten Dateien auf.

Diese Antwort stammt von http://gitready.com/intermediate/2009/02/18/temporarily-ignoring-files.html .

146
phatmann

Sie haben mehrere Möglichkeiten:

  • Belassen Sie eine fehlerhafte (oder nicht festgeschriebene) .gitignore -Datei in Ihrem Arbeitsverzeichnis (oder wenden Sie sie automatisch mit topgit oder einem anderen solchen Patch-Tool an).
  • Fügen Sie die Ausschlüsse in Ihre $GIT_DIR/info/exclude -Datei ein, wenn dies spezifisch für einen Baum ist.
  • Führen Sie git config --global core.excludesfile ~/.gitignore aus und fügen Sie Ihrem ~/.gitignore Muster hinzu. Diese Option gilt, wenn Sie bestimmte Muster über alle Bäume hinweg ignorieren möchten. Ich benutze dies zum Beispiel für .pyc und .pyo Dateien.

Stellen Sie außerdem sicher, dass Sie Muster verwenden und Dateien nicht explizit auflisten, sofern zutreffend.

104
Emil Sit

Ich denke, Sie suchen nach:

git update-index --skip-worktree FILENAME

die lokal vorgenommenen Änderungen ignorieren

Hier ist http://devblog.avdi.org/2011/05/20/keep-local-modifications-in-git-tracked-files/ weitere Erklärung zu dieser Lösung!

50
Piotr Korlaga

Sie können einige Git-Aliase installieren, um diesen Vorgang zu vereinfachen. Dadurch wird der Knoten _[alias]_ Ihrer Datei _.gitconfig_ bearbeitet.

_git config --global alias.ignore 'update-index --skip-worktree'
git config --global alias.unignore 'update-index --no-skip-worktree'
git config --global alias.ignored '!git ls-files -v | grep "^S"'
_

Die für Sie installierten Verknüpfungen lauten wie folgt:

  • _git ignore config.xml_
    • git gibt vor, keine Änderungen zu sehen, wenn _config.xml_ - Sie können diese Änderungen nicht versehentlich durchführen.
  • _git unignore config.xml_
    • git nimmt die Bestätigung Ihrer Änderungen an _config.xml_ wieder auf, sodass Sie diese Änderungen erneut festschreiben können.
  • _git ignored_
    • git listet alle Dateien auf, die Sie auf die oben beschriebene Weise "ignorieren".

Ich habe diese unter Bezugnahme auf Phatmanns Antwort - erstellt, das eine _--assume-unchanged_ -Version desselben darstellt.

In der vorliegenden Version wird _--skip-worktree_ verwendet, um lokale Änderungen zu ignorieren. Siehe Borealids Antwort für eine vollständige Erklärung des Unterschieds, aber im Wesentlichen besteht der Zweck von _--skip-worktree_ darin , dass Entwickler Dateien ändern, ohne das Risiko, ihre Änderungen zu übernehmen .

Der hier vorgestellte Befehl _git ignored_ verwendet _git ls-files -v_ und filtert die Liste, um nur die Einträge anzuzeigen, die mit dem Tag S beginnen. Das S -Tag kennzeichnet eine Datei mit dem Status "Arbeitsbaum überspringen". Eine vollständige Liste der von _git ls-files_ angezeigten Dateistatus finden Sie in der Dokumentation zu der Option _-t_ unter git ls-files .

45
Birchlabs

Sie können Ihrem Ausgangsverzeichnis einfach eine .gitignore-Datei hinzufügen, d. H. $HOME/.gitignore oder ~/.gitignore. Dann fordern Sie git auf, diese Datei mit dem folgenden Befehl zu verwenden:

git config --global core.excludesfile ~/.gitignore

Dies ist eine normale .gitignore-Datei, auf die git verweist, wenn entschieden wird, was ignoriert werden soll. Da es sich in Ihrem Home-Verzeichnis befindet, gilt es nur für Sie und verschmutzt keine Projekt-.gitignore-Dateien.

Ich benutze diesen Ansatz seit Jahren mit großartigen Ergebnissen.

33
JESii

Wenn Ihr Repo noch keine .gitignore-Datei hat, können Sie einfach eine .gitignore-Datei erstellen und .gitignore zur Liste der zu ignorierenden Dateien hinzufügen.

0
g.rocket