Praktische Anwendungsfälle mit .gitignore
Einer der häufigsten Anwendungsfälle für git rm --cached ist, wenn Sie die Verfolgung von Dateien beenden möchten, die ignoriert werden sollen. Lassen Sie uns dies anhand eines praktischen Beispiels untersuchen.
Erstellen und Committen von Dateien
Erstellen wir zunächst eine Situation, in der wir versehentlich Dateien committet haben, die wir hätten ignorieren sollen:
- Stellen Sie sicher, dass Sie sich noch im Verzeichnis
git-index-demo befinden:
cd ~/project/git-index-demo
- Fügen wir unsere vorhandenen Dateien dem Index hinzu:
git add hello.txt another.txt
- Committen wir nun diese Dateien:
git commit -m "Initial commit"
Sie sollten eine Ausgabe sehen, die den Commit bestätigt:
[master (root-commit) xxxxxxx] Initial commit
2 files changed, 2 insertions(+)
create mode 100644 another.txt
create mode 100644 hello.txt
- Erstellen Sie eine Protokolldatei, die eine generierte Datei simuliert, die wir nicht verfolgen möchten:
echo "Some log data" > application.log
- Fügen wir diese Protokolldatei versehentlich hinzu und committen sie:
git add application.log
git commit -m "Add log file by mistake"
Sie sollten eine Ausgabe sehen, die den Commit bestätigt:
[master xxxxxxx] Add log file by mistake
1 file changed, 1 insertion(+)
create mode 100644 application.log
Verwenden von .gitignore und git rm --cached
Lassen Sie uns nun unseren Fehler beheben, indem wir eine .gitignore-Datei erstellen und git rm --cached verwenden:
- Erstellen Sie eine
.gitignore-Datei, um anzugeben, dass wir alle .log-Dateien ignorieren möchten:
echo "*.log" > .gitignore
- Überprüfen Sie den Status:
git status
Sie sollten Folgendes sehen:
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
nothing added to commit but untracked files present (use "git add" to track)
Beachten Sie, dass die Datei application.log nicht als geändert aufgeführt wird, obwohl wir die .gitignore-Datei mit dem Muster *.log haben. Dies liegt daran, dass .gitignore nur verhindert, dass nicht verfolgte Dateien dem Index hinzugefügt werden. Dateien, die bereits verfolgt werden, werden weiterhin verfolgt.
- Fügen wir die
.gitignore-Datei hinzu und committen sie:
git add .gitignore
git commit -m "Add .gitignore file"
- Entfernen wir nun die Protokolldatei aus dem Git-Index, während wir sie in unserem Dateisystem behalten:
git rm --cached application.log
Sie sollten Folgendes sehen:
rm 'application.log'
- Überprüfen Sie den Status:
git status
Sie sollten Folgendes sehen:
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: application.log
Dies zeigt an, dass das Löschen der Datei aus dem Tracking-System von Git im nächsten Commit enthalten sein wird.
- Committen wir diese Änderung:
git commit -m "Stop tracking application.log"
- Überprüfen Sie den Status noch einmal:
git status
Sie sollten Folgendes sehen:
On branch master
nothing to commit, working tree clean
- Überprüfen wir nun, ob die Datei weiterhin in unserem Dateisystem existiert:
ls -l
Sie sollten sehen, dass application.log zusammen mit unseren anderen Dateien weiterhin existiert:
total 16
-rw-r--r-- 1 labex labex 13 [date] another.txt
-rw-r--r-- 1 labex labex 13 [date] application.log
-rw-r--r-- 1 labex labex 6 [date] .gitignore
-rw-r--r-- 1 labex labex 11 [date] hello.txt
- Versuchen wir, die Protokolldatei zu ändern, um zu sehen, ob Git die Änderungen verfolgt:
echo "More log data" >> application.log
git status
Sie sollten Folgendes sehen:
On branch master
nothing to commit, working tree clean
Obwohl wir die Protokolldatei geändert haben, erkennt Git keine Änderungen, da die Datei aufgrund des .gitignore-Musters jetzt ignoriert wird.
Dies ist ein sehr gängiger Arbeitsablauf, wenn Sie versehentlich Dateien committen, die ignoriert werden sollen, wie z. B.:
- Build-Artefakte
- Protokolldateien
- Konfigurationsdateien mit sensiblen Informationen
- Abhängigkeitsverzeichnisse (wie
node_modules in JavaScript-Projekten)
Durch die Verwendung von git rm --cached zusammen mit .gitignore können Sie:
- Die Verfolgung von Dateien beenden, die ignoriert werden sollen
- Die Dateien in Ihrem lokalen Dateisystem behalten
- Verhindern, dass sie in Zukunft dem Repository hinzugefügt werden