1857 Stimmen

Wie kann ich Git so konfigurieren, dass es bestimmte Dateien lokal ignoriert?

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 nicht für jede einzelne zufällige nicht verfolgte Datei in meinen lokalen Zweigen Änderungen an der Git-Konfiguration vornehmen.

69voto

JESii Punkte 4281

Sie können einfach eine .gitignore-Datei zu Ihrem Home-Verzeichnis hinzufügen, z. B. $HOME/.gitignore o ~/.gitignore . Dann weisen Sie git an, diese Datei mit dem Befehl zu verwenden:

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

Dies ist eine normale .gitignore-Datei, auf die Git verweist, wenn es entscheidet, was ignoriert werden soll. Da sie sich in Ihrem Heimatverzeichnis befindet, gilt sie nur für Sie selbst und beeinträchtigt keine .gitignore-Dateien in Projekten.

Ich wende diese Methode seit Jahren mit großem Erfolg an.

65voto

Birchlabs Punkte 6519

Sie können einige Git-Aliase um diesen Prozess zu vereinfachen. Dies bearbeitet die [alias] Knoten Ihrer .gitconfig archivo.

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 Verknüpfungen, die dadurch für Sie installiert werden, sind folgende

  • git ignore config.xml
    • git wird so tun, als ob es keine Änderungen bei config.xml - verhindern, dass Sie diese Änderungen versehentlich übertragen.
  • git unignore config.xml
    • wird git wieder Ihre Änderungen an config.xml - so dass Sie diese Änderungen erneut übertragen können.
  • git ignored
    • git listet alle Dateien auf, die Sie auf die oben beschriebene Weise "ignorieren".

Ich habe diese unter Bezugnahme auf Antwort von phatmann - die einen --assume-unchanged Version desselben.

Die von mir vorgestellte Version verwendet --skip-worktree um lokale Änderungen zu ignorieren. Siehe Borealids Antwort für eine vollständige Erklärung des Unterschieds, aber im Wesentlichen --skip-worktree Zweck des Programms ist für Entwickler, um Dateien zu ändern, ohne das Risiko einzugehen, dass ihre Änderungen übertragen werden .

El git ignored Der hier vorgestellte Befehl verwendet git ls-files -v und filtert die Liste so, dass nur die Einträge angezeigt werden, die mit dem Zeichen S Tag. Die Website S Tag bezeichnet eine Datei mit dem Status "Skip worktree". Für eine vollständige Liste der Dateistatus, die von git ls-files : siehe die Dokumentation für das Programm -t Option auf git ls-files .

62voto

Yuseferi Punkte 6592

Dies ist eine kurze einzeilige Lösung, um eine lokale Datei auszuschließen.

 echo YOUR_FILE_OR_DIRECTORY >> .git/info/exclude

19voto

Ahmed Kareem Punkte 181

Sowohl --assume-unchanged als auch --skip-worktree sind KEIN KORREKTER WEG um Dateien lokal zu ignorieren ... Bitte prüfen Sie diese Antwort und die Notizen in die Dokumentation von git update-index. Dateien, die sich aus irgendeinem Grund häufig ändern (und/oder von einem Klon zu einem anderen wechseln) und deren Änderungen nicht übertragen werden sollen, dann sind diese Dateien SOLLTE NICHT überhaupt aufgespürt werden.

Es gibt jedoch zwei geeignete Möglichkeiten, Dateien lokal zu ignorieren (beide funktionieren mit nicht verfolgten Dateien). Entweder man setzt die Dateinamen in die Datei .git/info/exclude, die die lokale Variante von .gitignore ist, aber spezifisch für den aktuellen Klon. Oder Sie verwenden eine globale .gitignore-Datei (die eigentlich nur für allgemeine Hilfsdateien wie z.B. pyz, pycache usw. verwendet werden sollte) und die Datei wird in jedem Git-Repository auf Ihrem Rechner ignoriert.

Um die oben genannten Schritte zu automatisieren (Hinzufügen zu exclude oder global .gitignore), können Sie die folgenden Befehle verwenden (fügen Sie sie Ihrem Bash-Profil hinzu):

  • Per clone local exclude (Beachten Sie, dass Sie sich im Root des Repository befinden, wenn Sie den Befehl aufrufen, da Sie den relativen Pfad verwenden), ändern Sie ##FILE-NAME## in .git/info/exclude
  • Global .gitignore, zuerst global .gitignore erstellen ici dann ändern Sie ##DATEI-NAME## in ~/.gitignore

Linux

alias git-ignore='echo $1 >> ##FILE-NAME##'
alias git-show-ignored='cat ##FILE-NAME##'
git-unignore(){
  GITFILETOUNIGNORE=${1//\//\\\/}
  sed -i "/$GITFILETOUNIGNORE/d" ##FILE-NAME##
  unset GITFILETOUNIGNORE
}

MacOS (Sie benötigen die .bak für sed Änderungen an Ort und Stelle (d. h. Sie sind gezwungen, eine Dateierweiterung zu inplace sed hinzuzufügen, d. h. erstellen Sie eine Sicherungskopie, bevor Sie etwas ersetzen), daher habe ich zum Löschen der .bak-Datei rm filename.bak hinzugefügt)

alias git-ignore='echo $1 >> ##FILE-NAME##'
alias git-show-ignored='cat ##FILE-NAME##'
git-unignore(){
  GITFILETOUNIGNORE=${1//\//\\\/}
  sed -i.bak "/$GITFILETOUNIGNORE/d" ##FILE-NAME##
  rm ##FILE-NAME##.bak
  unset GITFILETOUNIGNORE
}

Dann können Sie das tun:

git-ignore example_file.txt
git-unignore example_file.txt

6voto

aak318 Punkte 139

Um nicht verfolgte Dateien zu ignorieren, insbesondere wenn sie sich in (einigen wenigen) Ordnern befinden, die nicht verfolgt werden, ist eine einfache Lösung, eine .gitignore Datei in jeden nicht verfolgten Ordner und geben Sie eine einzige Zeile mit * gefolgt von einer neuen Zeile. Das ist eine wirklich einfache und unkomplizierte Lösung, wenn sich die nicht verfolgten Dateien in einigen wenigen Ordnern befinden. Bei mir kamen alle Dateien aus einem einzigen nicht verfolgten Ordner vendor und das obige hat gerade funktioniert.

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