Wie ignoriere ich Dateien, die sich im Repository befinden?

92

Ich habe eine Datei (config.php), die bereits im Git-Repository festgeschrieben ist, aber ich möchte sie lokal ignorieren, dh ich möchte, dass diese Datei im Repository verbleibt, aber Git zwingt, alle Änderungen daran zu ignorieren.

Ich habe die Datei in .gitignore abgelegt, aber sie ist immer noch als geändert markiert und Git versucht immer noch, Änderungen daran zu übernehmen, jedes Mal, wenn ich etwas festschreibe. Irgendeine Idee, was vermisse ich oder mache ich falsch?

prcaen
quelle
Bitte fügen Sie Ihre .gitignore-Datei hinzu - auf diese Weise können Probleme auftreten.
Lars

Antworten:

188

Wenn die Datei weiterhin im Status angezeigt wird, obwohl sie sich im Gitignore befindet, stellen Sie sicher, dass sie noch nicht verfolgt wurde.

git rm --cached config.php

Wenn Sie es nur lokal ignorieren möchten, können Sie es auch vom Git-Status ignorieren lassen:

git update-index --assume-unchanged config.php
VonC
quelle
1
OK danke ! Kann diese Datei Probleme verursachen, wenn ich meinen Zweig mit einem anderen zusammenführe?
Prcaen
1
@ Nimbus147: Es sollte kein Problem sein, und alle Änderungen an dieser Datei werden weiterhin ignoriert (dh nicht hinzugefügt / festgeschrieben).
VonC
Wenn Sie SmartGit verwenden, sollten Sie dazu remove verwenden.
Omid-RH
1
Gibt es eine Möglichkeit, update-index --assume-unchangedden Remote-Zweig zu erzwingen ? Ich möchte die Datei im Repo behalten, kann sie aber nicht von anderen ändern, bin aber darüber hinaus nicht für die Bühne verfügbar.
p014k
1
@ p014k Nicht das ich wüsste. Für diese Art von Datei lasse ich sie unter einem anderen Namen versioniert und verwende dann einen Content Filer-Treiber, um bei Bedarf automatisch die richtige (private) Datei zu generieren. Dieser Filter wäre zum Beispiel auf der Bühne nicht aktiv. Siehe stackoverflow.com/a/54454356/6309 und den zugehörigen Link.
VonC
5

Eingecheckte Datei ignorieren:

git update-index --assume-unchanged file

Rückgängig machen

git update-index --no-assume-unchanged file

Alle zurücksetzen

git update-index --really-refresh 
Shiva Kumar
quelle
Hilfreich. Das Zurücksetzen einer Datei hat funktioniert, aber das Zurücksetzen aller Dateien hat nicht funktioniert.
Adem Tepe
4

Wenn sich die Datei bereits im Repository und damit im Bereich Index / Staging befindet, ändert ein Update auf .gitignore nichts an dieser Situation. Sie wird weiterhin festgeschrieben.

Verwenden Sie zum Entfernen der Datei aus dem Bereich Index / Staging git rm <file>.

Philip Oakley
quelle
Was ist, wenn sich die Datei im Repository befindet, aber noch nicht bereitgestellt ist? Ich versuche * .log-Dateien zu ignorieren, sehe sie aber immer noch unter "Änderungen". Ich möchte alles ignorieren, was tun?
Sandra K
@SandraK Wenn sich beim letzten Commit bereits eine ältere Version dieser Datei (Dateipfad / Name) im Repo befindet, wird sie als verfolgt betrachtet. Der 'Index' hat diese Datei in seinen Datensätzen und teilt dies statusIhnen weiterhin mit über diese Änderungen. Wenn Sie * .log-Dateien sowohl für zuvor angeheftete als auch für derzeit nicht verfolgte Dateien ignorieren möchten, müssen Sie beide .gitignore-Dateien git rm *.logaktualisieren. Überprüfen Sie zuerst, ob einige Protokolldateien wirklich wichtig sind ... Es ist leicht, diese spezielle zu vergessen ;-)
Philip Oakley
-3

Sobald eine Datei im Gitignore aufgeführt ist, können Sie sie nicht mehr ändern.

So können Sie die Datei in einem Commit aus der Liste entfernen, Änderungen im nächsten Commit ändern und die Datei anschließend in einem dritten Commit erneut zur Ignorierliste hinzufügen.

Normalerweise teile ich die Datei in zwei Teile auf, eine, die zulässig ist, und ich kann sie ändern, einschließlich der zweiten Datei, falls vorhanden. Dann können Entwickler optional Konfigurationsänderungen in der ignorierten Datei vornehmen.

erikvold
quelle
1
" Sobald eine Datei im .gitignore aufgeführt ist, können Sie sie nicht mehr ändern " - können Sie klarstellen, was Sie meinen? Ich habe viele Dateien in vielen meiner .gitignores und ich ändere diese Dateien ständig! Dies ist das erste Mal, dass jemand sagt, dass ich eine Datei nach dem Hinzufügen .gitignorenicht mehr ändern kann.
Trejder
1
Er ist tatsächlich falsch. Sie können sie ändern. Git lädt sie einfach nicht hoch oder gibt Ihnen sogar die Möglichkeit, sie hochzuladen.
David