Vraag Hoe Git "vergeten" te maken over een bestand dat is gevolgd maar nu in .gitignore is?


Er is een bestand dat werd gevolgd door git, maar nu staat het bestand op de .gitignore lijst.

Dit bestand blijft echter zichtbaar in git status nadat het is bewerkt. Hoe forceer je git om het helemaal te vergeten?


3645
2017-08-13 19:23


oorsprong


antwoorden:


.gitignore voorkomt dat niet-volgde bestanden worden toegevoegd (zonder een add -f) naar de verzameling bestanden die wordt bijgehouden door git, maar git zal doorgaan met het traceren van bestanden die al worden bijgehouden.

Om het traceren van een bestand te stoppen, moet u het uit de index verwijderen. Dit kan worden bereikt met deze opdracht.

git rm --cached <file>

Het verwijderen van het bestand van de hoofdrevisie gebeurt tijdens de volgende commit.


3872
2017-08-13 20:40



De onderstaande reeks commando's verwijdert alle items uit de Git Index (niet uit de werkmap of lokale repository) en werkt dan de Git Index bij, met respect voor git negeert. PS. Index = Cache

Eerste:

git rm -r --cached . 
git add .

Dan:

git commit -am "Remove ignored files"

1990
2017-09-30 13:51



git update-index doet het werk voor mij:

git update-index --assume-unchanged <file>

Notitie: Deze oplossing is eigenlijk onafhankelijk van .gitignore omdat gitignore alleen voor niet-gevonden bestanden is.

Bewerk: Aangezien dit antwoord is gepost, is er een nieuwe optie gemaakt die de voorkeur verdient. Je zou ... moeten gebruiken --skip-worktree welke is voor gemodificeerde bijgehouden bestanden die de gebruiker niet meer wil vastleggen en behouden --assume-unchanged voor prestaties om te voorkomen dat git de status van big-track-bestanden controleert. Zien https://stackoverflow.com/a/13631525/717372 voor meer details...


739
2017-11-27 11:24



git ls-files --ignored --exclude-standard -z | xargs -0 git rm --cached
git commit -am "Remove ignored files"

Hiermee wordt de lijst met genegeerde bestanden opgehaald en verwijderd uit de index, waarna de wijzigingen worden doorgevoerd.


217
2018-05-23 22:29



Ik gebruik altijd dit commando om die niet-gevonden bestanden te verwijderen. One-line, Unix-stijl, schone output:

git ls-files --ignored --exclude-standard | sed 's/.*/"&"/' | xargs git rm -r --cached

Het geeft een overzicht van alle genegeerde bestanden, vervangt elke uitvoerregel door een regel die is genoteerd om paden met spaties erin te beheren en alles door te geven git rm -r --cached om de paden / bestanden / mappen uit de index te verwijderen.


59
2018-06-19 15:42



Als je niet kan git rm een bijgehouden bestand omdat andere mensen het mogelijk nodig hebben (waarschuwing, zelfs als u  git rm --cached, wanneer iemand anders deze wijziging krijgt, zullen hun bestanden in hun bestandssysteem worden verwijderd) kijk dan naar https://gist.github.com/1423106 voor manieren waarop mensen het probleem hebben opgelost.


49
2017-07-19 00:08



verplaats het, bega en verplaats het dan terug. Dit heeft in het verleden voor mij gewerkt. Er is waarschijnlijk een 'gittier' manier om dit te bereiken.


43
2017-08-13 19:27