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.
Antworten
Zu viele Anzeigen?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.
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 wird so tun, als ob es keine Änderungen bei
git unignore config.xml
- wird git wieder Ihre Änderungen an
config.xml
- so dass Sie diese Änderungen erneut übertragen können.
- wird git wieder Ihre Änderungen an
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
.
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
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.