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