Es gibt eine Datei, die von Git verfolgt wurde, aber jetzt ist die Datei in der .gitignore
Liste.
Diese Datei taucht jedoch weiterhin in git status
nachdem es bearbeitet wurde. Wie kann man Git zwingen, es komplett zu vergessen?
Es gibt eine Datei, die von Git verfolgt wurde, aber jetzt ist die Datei in der .gitignore
Liste.
Diese Datei taucht jedoch weiterhin in git status
nachdem es bearbeitet wurde. Wie kann man Git zwingen, es komplett zu vergessen?
In meinem Fall musste ich " .envrc
" in der .gitignore Datei.
Und dann habe ich benutzt:
git update-index --skip-worktree .envrc
git rm --cached .envrc
Und die Datei wurde entfernt.
Dann habe ich die Datei erneut übertragen und mitgeteilt, dass sie entfernt wurde.
Aber als ich den Befehl git log -p
wird der Inhalt der Datei (die geheimen Zugangsdaten des Amazon S3 ) zeigte den Inhalt an, der entfernt wurde, und ich möchte nicht, dass dieser Inhalt jemals in der Historie des Git-Repositorys angezeigt wird.
Dann habe ich diesen Befehl verwendet:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch .envrc' HEAD
Und ich sehe den Inhalt nicht wieder.
Ich mochte JonBrave's Antwort aber ich habe genug unordentliche Arbeitsverzeichnisse, die commit -a
macht mir ein bisschen Angst, also habe ich Folgendes getan:
git config --global alias.exclude-ignored '!git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cached && git ls-files -z --ignored --exclude-standard | xargs -0 git stage && git stage .gitignore && git commit -m "new gitignore and remove ignored files from index"'
Die Aufschlüsselung:
git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cached
git ls-files -z --ignored --exclude-standard | xargs -0 git stage
git stage .gitignore
git commit -m "new gitignore and remove ignored files from index"
Wenn Sie die CLI nicht verwenden möchten und unter Windows arbeiten, ist eine sehr einfache Lösung die Verwendung von TortoiseGit . Es hat die "Löschen (lokal halten)" Aktion im Menü, die gut funktioniert.
El BFG wurde speziell dafür entwickelt, unerwünschte Daten wie große Dateien oder Passwörter aus Git-Repositories zu entfernen. Daher verfügt es über ein einfaches Flag, das alle großen historischen (nicht-im-aktuellen-Commit) Dateien entfernt: --strip-blobs-bigger-than'
java -jar bfg.jar --strip-blobs-bigger-than 100M
Wenn Sie Dateien mit Namen angeben möchten, können Sie auch das tun:
java -jar bfg.jar --delete-files *.mp4
Der BFG ist 10-1000x schneller als git filter-branch
und ist im Allgemeinen viel einfacher zu benutzen - siehe die vollständige Gebrauchsanweisung y Beispiele für weitere Einzelheiten.
In der neuesten Git-Version ist dies kein Problem mehr. (v2.17.1 zum Zeitpunkt der Erstellung dieses Dokuments).
El .gitignore Datei ignoriert schließlich verfolgte, aber gelöschte Dateien. Sie können dies selbst testen, indem Sie das folgende Skript ausführen. Die endgültige git status
sollte die Anweisung "nichts zu übertragen" melden.
# Create an empty repository
mkdir gitignore-test
cd gitignore-test
git init
# Create a file and commit it
echo "hello" > file
git add file
git commit -m initial
# Add the file to gitignore and commit
echo "file" > .gitignore
git add .gitignore
git commit -m gitignore
# Remove the file and commit
git rm file
git commit -m "removed file"
# Reintroduce the file and check status.
# .gitignore is now respected - status reports "nothing to commit".
echo "hello" > file
git status
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.