Kann ich Dateien lokal ignorieren, ohne die globale Git-Konfiguration für alle anderen zu verschmutzen? Ich habe nicht nachverfolgte Dateien in meinem Git-Status, die Spam sind, aber ich möchte nicht für jede einzelne kleine zufällige nicht nachverfolgte Datei, die ich in meinen lokalen Branches habe, Änderungen an der Git-Konfiguration vornehmen.
Wie konfiguriere ich Git, um einige Dateien lokal zu ignorieren?
Björn
Josh Lee
Von die entsprechende Git-Dokumentation:
Muster, die für ein bestimmtes Repository spezifisch sind, die aber nicht mit anderen verwandten Repositorys geteilt werden müssen (z. B. Hilfsdateien, die sich innerhalb des Repository befinden, aber spezifisch für den Arbeitsablauf eines Benutzers sind), sollten in die
$GIT_DIR/info/exclude
Datei.
Die .git/info/exclude
Datei hat das gleiche Format wie jede andere .gitignore
Datei. Eine weitere Option ist das Einstellen core.excludesFile
auf den Namen einer Datei, die globale Muster enthält.
Beachten Sie, wenn Sie bereits nicht bereitgestellte Änderungen haben, müssen Sie nach dem Bearbeiten Ihrer Ignoriermuster Folgendes ausführen:
git update-index --assume-unchanged <file-list>
Hinweis auf $GIT_DIR
: Dies ist eine verwendete Notation überall das Git-Handbuch, um einfach den Pfad zum Git-Repository anzugeben. Wenn die Umgebungsvariable gesetzt ist, überschreibt sie den Speicherort des Repos, in dem Sie sich befinden, was wahrscheinlich nicht das ist, was Sie wollen.
Bearbeiten: Eine andere Möglichkeit ist die Verwendung von:
git update-index --skip-worktree <file-list>
Kehren Sie es um:
git update-index --no-skip-worktree <file-list>
-
Als Hinweis, stellen Sie sicher, dass Sie laufen
git update-index --assume-unchanged [<file>...]
nach dem Hinzufügen zur Exclude-Datei. Bis dahin werden die Änderungen nicht übernommen.– tollmanz
30. März 2013 um 16:05 Uhr
-
Ich musste ‘git update-index …’ nicht ausführen, damit die Änderungen mit git 1.7.9.5 wirksam wurden.
– Jeffrey Martinez
9. Dezember 2013 um 5:30 Uhr
-
Sie müssen git update-index nur verwenden, wenn Sie bereits eine Änderung an der Datei vorgenommen haben und diese nun ignorieren möchten. Wenn Sie den Ausschluss ändern, bevor Sie die Änderung vornehmen, ist dies nicht erforderlich.
– Brady Emerson
24. Juni 2014 um 0:45 Uhr
-
Während dies verhindert, dass die Datei während Commits wie .gitignore als geändert angezeigt wird, werden die Datei(en) im Gegensatz zu ignorierten Dateien immer noch auf die Repo-Version zurückgesetzt, wenn Sie git reset –hard ausführen.
– Brady Emerson
24. Juni 2014 um 0:47 Uhr
-
Per stackoverflow.com/questions/23097368/… und stackoverflow.com/questions/13630849/…,
skip-worktree
würde wahrscheinlich bevorzugt werdenassume-unchanged
.– danShumway
22. Juli 2015 um 2:39 Uhr
Florian Seßer
Aktualisieren: Erwägen Sie die Verwendung git update-index --skip-worktree [<file>...]
stattdessen 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 das mit lokalen Änderungen an Konfigurationsdateien), verwenden Sie git update-index --assume-unchanged [<file>...]
.
-
Nur zur Anmerkung, ich habe eine Datei zu $GIT_DIR/info/exclude hinzugefügt (z. B. my-file.php) und musste sie dann ausführen
git update-index --assume-unchanged my-file.php
damit es anfängt, ignoriert zu werden. Danke für den Tipp!– tollmanz
30. März 2013 um 16:04 Uhr
-
Um es rückgängig zu machen:
git update-index --no-assume-unchanged my-file.php
– Strahl
31. Juli 2013 um 16:14 Uhr
-
Nur zur Verdeutlichung: angenommen-unverändert ist für nachverfolgte Dateien (im Repo vorhanden) … OP hat in diesem Fall nach UNverfolgten Dateien gefragt
.git/info/exclude
ist, was Sie wollen (um zu vermeiden, dass die oft geteilte und verfolgte .gitignore-Datei verschmutzt wird)– dyodji
30. Januar 2014 um 1:56 Uhr
-
Laut stackoverflow.com/questions/23097368/… gilt dies als unsicher, und Ihre Dateien können trotzdem festgeschrieben werden, wenn Sie nicht aufpassen. Es ist als Leistungshilfe gedacht, nicht als idiotensichere Lösung für dieses Problem.
– danShumway
16. Juli 2015 um 23:16 Uhr
-
Ich eilte zu
--assume-unchanged
bevor Sie Ihre lesen aktualisieren. Ich machte mit--no-assume-unchanged
und dann tat das--skip-worktree
… Bin ich im Klaren?– Nikolaus Miari
7. Juli 2016 um 5:11 Uhr
Fügen Sie die folgenden Zeilen hinzu [alias] Abschnitt Ihrer .gitconfig-Datei
ignore = update-index --assume-unchanged
unignore = update-index --no-assume-unchanged
ignored = !git ls-files -v | grep "^[[:lower:]]"
Jetzt können Sie verwenden git ignore my_file
Änderungen an der lokalen Datei zu ignorieren, und git unignore my_file
um die Änderungen nicht mehr zu ignorieren. git ignored
listet die ignorierten Dateien auf.
Diese Antwort stammt von http://gitready.com/intermediate/2009/02/18/temporarily-ignoring-files.html.
-
“!git ls-files -v | grep “^[[:lower:]]” – Weißt du vielleicht, wie man das mit Windows cmd macht?
– Haohmaru
28. März 2018 um 20:20 Uhr
-
Installieren Sie eine echte Shell (z. B. bietet Babun bash oder zsh) 😉 Ich kenne Ihre Gefühle, aber ich bin kürzlich von Windows auf Linux umgestiegen und würde cmd nie wieder verwenden.
– xeruf
6. Juni 2018 um 6:50 Uhr
-
@Haohmaru, Sie könnten immer WSL (Windows Subsystem for Linux) verwenden.
– Eine Gr
10. Januar 2020 um 9:49 Uhr
-
BEEINDRUCKEND ! tolle Befehle
– jo_
4. Februar um 10:37 Uhr
Emil Sit
Sie haben mehrere Möglichkeiten:
- Hinterlasse ein schmutziges (oder nicht festgelegtes)
.gitignore
Datei in Ihrem Arbeitsverzeichnis (oder automatisch anwenden mit topgit oder ein anderes solches Patch-Tool). - Setzen Sie die Ausschlüsse in Ihre
$GIT_DIR/info/exclude
Datei, wenn diese für einen Baum spezifisch ist. - Laufen
git config --global core.excludesfile ~/.gitignore
und fügen Sie Muster zu Ihren hinzu~/.gitignore
. Diese Option gilt, wenn Sie bestimmte Muster ignorieren möchten alle Bäume. Ich benutze das für.pyc
und.pyo
Dateien, zum Beispiel.
Stellen Sie außerdem sicher, dass Sie Muster verwenden und Dateien nicht explizit auflisten, sofern zutreffend.
Piotr Korlaga
Ich denke du suchst:
git update-index --skip-worktree FILENAME
die lokale Ä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!
Verwendung rückgängig machen:
git update-index --no-skip-worktree FILENAME
-
Es gibt eine entsprechende Diskussion zwischen
--skip-worktree
und--assume-unchanged
bei dieser SO-Frage– Merwer
9. Dezember 2015 um 14:54 Uhr
-
Wie würde ich dies rückgängig machen oder die Liste der Dateien/Muster anzeigen, die derzeit ignoriert werden über
--skipworktree
sollte ich später meine Meinung ändern und die Datei erneut verfolgen?– Anomalie
18. Juli 2019 um 15:38 Uhr
-
wie macht man das rückgängig?
– Benutzer1735921
13. August 2019 um 6:32 Uhr
-
Zum Rückgängigmachen bitte verwenden
git update-index --no-skip-worktree <file>
– Benutzer1735921
25. September 2019 um 7:59 Uhr
-
@Anomaly Um die Dateien aufzulisten, die von –skip-worktree ignoriert werden, benötigen Sie dies
git ls-files -v | grep ^S
– Ahmed Karim
17. Juni 2020 um 2:08 Uhr
Brad Koch
Sie können Ihrem Home-Verzeichnis einfach eine .gitignore-Datei hinzufügen, dh $HOME/.gitignore
oder ~/.gitignore
. Sagen Sie dann git, diese Datei mit dem 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 .gitignore-Dateien des Projekts.
Ich verwende diesen Ansatz seit Jahren mit großartigen Ergebnissen.
-
Es gibt eine entsprechende Diskussion zwischen
--skip-worktree
und--assume-unchanged
bei dieser SO-Frage– Merwer
9. Dezember 2015 um 14:54 Uhr
-
Wie würde ich dies rückgängig machen oder die Liste der Dateien/Muster anzeigen, die derzeit ignoriert werden über
--skipworktree
sollte ich später meine Meinung ändern und die Datei erneut verfolgen?– Anomalie
18. Juli 2019 um 15:38 Uhr
-
wie macht man das rückgängig?
– Benutzer1735921
13. August 2019 um 6:32 Uhr
-
Zum Rückgängigmachen bitte verwenden
git update-index --no-skip-worktree <file>
– Benutzer1735921
25. September 2019 um 7:59 Uhr
-
@Anomaly Um die Dateien aufzulisten, die von –skip-worktree ignoriert werden, benötigen Sie dies
git ls-files -v | grep ^S
– Ahmed Karim
17. Juni 2020 um 2:08 Uhr
Sie können einige installieren Git-Aliase um diesen Vorgang zu vereinfachen. Dies bearbeitet die [alias]
Knoten von Ihnen .gitconfig
Datei.
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 dies für Sie installiert, lauten wie folgt:
git ignore config.xml
- git wird so tun, als würde es keine Änderungen sehen
config.xml
– verhindert, dass Sie diese Änderungen versehentlich übernehmen.
- git wird so tun, als würde es keine Änderungen sehen
git unignore config.xml
- git wird die Bestätigung Ihrer Änderungen an fortsetzen
config.xml
– damit Sie diese Änderungen erneut übernehmen können.
- git wird die Bestätigung Ihrer Änderungen an fortsetzen
git ignored
- git listet alle Dateien auf, die Sie auf die oben beschriebene Weise “ignorieren”.
Ich habe diese anhand von Phatmanns Antwort erstellt, die eine darstellt --assume-unchanged
Version derselben.
Die Version, die ich vorstelle, verwendet --skip-worktree
für das Ignorieren lokaler Änderungen. Siehe Borealids Antwort für eine vollständige Erklärung des Unterschieds, aber im Wesentlichen --skip-worktree
Zweck ist für Entwickler, Dateien zu ändern, ohne das Risiko einzugehen, ihre Änderungen zu übernehmen.
Die git ignored
Befehl, der hier dargestellt wird, verwendet git ls-files -v
und filtert die Liste so, dass nur die Einträge angezeigt werden, die mit beginnen S
Schild. Die S
Tag bezeichnet eine Datei, deren Status “Arbeitsbaum überspringen” ist. Für eine vollständige Liste der Dateistatus, die von angezeigt werden git ls-files
: siehe die Dokumentation für die -t
Option an git ls-files
.
-
Dies funktioniert nicht für nicht verfolgte Dateien :< (git 2.13.5 auf osx)
– Terra Ashley
4. Oktober 2017 um 20:57 Uhr
-
Ist der ‘!’ soll drin sein
'!git ls-files -v | grep "^S"'
? Der Befehl funktioniert bei mir nicht, wenn er dort ist … und scheint gut zu funktionieren, wenn er entfernt ist.– Tiris
3. November 2017 um 12:56 Uhr
-
Das Ausrufezeichen in einem Git-Alias weist Git an, eine auszuführen externer Befehleher als ein git Unterbefehl. Ich habe es eingefügt, weil ich eine Shell-Pipeline benötige, also muss ich git von außen aufrufen. Ich habe gerade versucht, das Ausrufezeichen zu entfernen (gemäß Ihrer Empfehlung), aber das tut es nicht arbeite für mich. Ich bekomme
Expansion of alias 'ignored' failed; 'git' is not a git command
. Das macht Sinn; ohne das Ausrufezeichen: git aliasiert Ihren Befehl aufgit git ls-files …
.– Birchlabs
3. November 2017 um 13:07 Uhr
-
Danke für die Erklärung. Ich bin mit Git-Alias nicht vertraut und habe nur eine Shell zum Testen ausgeführt, bevor ich den Alias erstellt habe.
– Tiris
3. November 2017 um 13:41 Uhr
-
Das ist eine geniale Lösung. Da Git-Tracks pro Verzeichnis ausgeführt werden, wenn Sie den obigen Alias ausführen
git ignore <filename>
, gilt es nur für dieses Verzeichnis. Und wenn Sie endlich Ihre Änderungen an dieser Datei vornehmen und an die Remote übertragen und übertragen möchten, verwenden Sie einfach das Handygit unignore <filename>
um es vorübergehend wieder zu verfolgen! Danke!– Nickang
21. September 2018 um 2:04 Uhr