8100 Stimmen

Wie kann ich Git dazu bringen, eine Datei zu "vergessen", die verfolgt wurde, aber jetzt in .gitignore ist?

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?

9voto

rld Punkte 2113

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.

7voto

Jay Irvine Punkte 205

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"
  • ignorierte Dateien aus dem Index entfernen
  • stage .gitignore und die gerade entfernten Dateien
  • übergeben.

6voto

Peter T. Punkte 2593

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.

6voto

Meir Gerenstadt Punkte 3537

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.

出典 Größe des Repositorys reduzieren

5voto

Lloyd Punkte 7804

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.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