Probleme beim Ignorieren zuvor ignorierter Dateien in Git Repo

70

Ich habe eine Site mit einem /sites/default/files/Verzeichnis, in dem Benutzerinhalte normalerweise gespeichert werden. Als ich herausfand, dass ich dieses Zeug nicht verfolgen muss, fügte ich meiner .gitignore-Datei / sites / default / files / hinzu.

Dann entdeckte ich, dass ich auch einige meist permanente Uploads in diesem Verzeichnis behalten wollte. Jetzt ist es sinnvoller, alles in / sites / default / files / zu verfolgen und unerwünschte Unterverzeichnisse auszuschließen, anstatt es umgekehrt zu machen.

Das Problem ist, dass Git nicht aufhört, dieses Verzeichnis zu ignorieren. Ich habe die Zeilen aus .gitignore entfernt, die dieses Verzeichnis angeben, und es wird nicht verfolgt. Ich habe die Option, git add /sites/default/files/ -fum git zu zwingen, das Verzeichnis zu verfolgen, aber ich habe das schon einmal gemacht und es scheint chaotisch.

Wenn .gitignore dieses Verzeichnis nicht mehr als ignoriert angibt, warum sollte ich Git zwingen, diese Dateien zu verfolgen?

Doub1ejack
quelle
1
Haben Sie zufällig Submodule im Einsatz? Vielleicht sites / oder sites / default / oder sogar sites / default / files /? Überprüfen Sie außerdem jedes dieser drei Verzeichnisse speziell auf eine Gitignore-Datei. Sie können auch versuchen git add -f sites/default/files/*, die spezifischen Dateien hinzuzufügen, anstatt das Verzeichnis hinzuzufügen.
Twalberg
Nein, keine Submodule (waren sich ihrer nicht bewusst, werden sie aber für die zukünftige Verwendung speichern - danke). Überprüfen Sie alle Verzeichnisse auf weitere Gitignore-Dateien - nichts. Und der Versuch, git add -f sites/default/files/*es nicht zu tun: Wenn ich es touch sites/default/files/test.minetue, sehe ich es immer noch nicht.
Doub1ejack
1
Hmmm ... na ja, sind Sie sicher, dass es in .gitignorediesem Match keine anderen Einträge gibt - irgendeinen Platzhalter oder so? Oder etwas, das dazu führen würde, dass die einzelnen Dateien ignoriert werden - wie a *.pycund dieses Verzeichnis, das nur .pycDateien enthält? Denken Sie daran, dass die Benennung filein .gitignoreauch mit einem subdirectory/fileoder sub/subdir/file...
Twalberg
Arrg! Das war genau das. Es gab einen weiteren Eintrag von files/versteckt unter einigen anderen Sachen und ich suchte sites/default/... Nun , das war eine Menge Mühe wegen eines dummen Fehlers. Seufzer. Vielen Dank.
Doub1ejack

Antworten:

72

Sie wissen schon, wie es geht. Ja, git add -fist der Weg.

Wenn du fragst warum ... liegt das daran, dass Git ein assume-unchangedbisschen intern eingestellt ist. Dieses Bit lässt git denken, dass die Datei nicht geändert wurde, also git addwird sie nicht hinzugefügt.

Wenn Sie mit den Implementierungsdetails herumspielen möchten, können Sie den git update-index --no-assume-unchanged <file>Befehl verwenden.

J-16 SDiZ
quelle
Wenn ich git zwinge, diese Dateien hinzuzufügen und in unser Entwicklungs-Repository zu verschieben, werden vermutlich auch alle anderen Entwickler damit beginnen, sie zu verfolgen, oder? Ich habe ein wenig Probleme zu sehen, wie das funktioniert, wenn ihre eigenen .gitignore-Dateien die Dateien ignorieren, die aus dem Dev-Repo abgerufen werden (bis sie ihre lokalen .gitignore-Dateien aktualisieren), aber ich bin in Ordnung, wenn ich nur git vertraue. .
Doub1ejack
Sie .gitignoresollten in der Versionskontrolle sein. Andere Entwickler sollten es erhalten, wenn sie aktualisieren.
J-16 SDiZ
Das stimmt, sie sollten. Änderungen an meiner .gitignore-Datei haben das Problem jedoch nicht gelöst, sodass ich mich frage, ob jeder der anderen Entwickler denselben -fFix für seine lokalen Repos verwenden muss.
Doub1ejack
@ Doub1ejack, wenn sie das auschecken, .gitignorebekommen sie auch deine /sites/default/files. Diese Dateien werden korrekt verfolgt.
J-16 SDiZ
13

Ich denke nicht, dass J-16 richtig ist. Von http://www.kernel.org/pub/software/scm/git/docs/git-add.html :

Der Befehl git add fügt standardmäßig keine ignorierten Dateien hinzu. Wenn ignorierte Dateien explizit in der Befehlszeile angegeben wurden, schlägt git add mit einer Liste ignorierter Dateien fehl. Ignorierte Dateien, die durch Verzeichnisrekursion oder Dateinamen-Globbing von Git erreicht werden (zitieren Sie Ihre Globs vor der Shell), werden stillschweigend ignoriert. Mit dem Befehl git add können ignorierte Dateien mit der Option -f (force) hinzugefügt werden.

git add -fscheint nur zum Hinzufügen einer Datei zu dienen, die irgendwo in einer Ignorierdatei vorhanden ist.

Vielleicht gibt es eine andere .gitignore-Datei in / sites oder / sites / default, die Git ebenfalls anweist, dieses Verzeichnis zu ignorieren, oder vielleicht wurde sie in .git / info / exclude festgelegt?

hdgarrood
quelle
Nein, ich habe nur die eine .gitignore-Datei und die Ausschlussdatei ist leer.
Doub1ejack
Vermisse ich dann etwas? Ich habe versucht, Ihre Situation zu reproduzieren ( pastebin.com/wZB6F8Qj ). Nach dem Bearbeiten von .gitignore wird die Datei erneut als nicht verfolgt angezeigt und git add filefunktioniert.
HDGARROOD
Ich frage mich auch ... nachdem ich -f verwendet habe, um git zum Hinzufügen eines Verzeichnisses zu zwingen, wenn ich erneut ein git addgit mache, das mir sagt, dass das Verzeichnis von einer meiner .gitignore-Dateien ignoriert wird. Ich habe mein lokales Repository nach .gitignore durchsucht und nur eines gefunden, die Ausschlussdatei geöffnet und überprüft, ob sie nicht stört. Bin ich etwas fehlt?
Doub1ejack
1
Woah ... Ich glaube, ich bin hier überfordert. Ich weiß nicht was los ist, nein. Dies ist ein wilder Stich in die Dunkelheit, aber eine neue Kasse in SVN hat die Dinge für mich schon einmal behoben ... vielleicht versuchen Sie dasselbe mit einem frischen Klon? edit:
egal
OH MEIN GOTT! Vielen Dank, dass Sie auf die Datei .git / info / exclude verweisen. Mein Problem war, dass der Ordner auch dort enthalten war. +1
Kainax
6

Für die Nachwelt: Die Antwort auf mein Problem war "schau genauer hin".

@twalberg wies richtig darauf hin, dass es eine Regel geben könnte, die ich in der .gitignore-Datei übersehen habe. Die kaskadierende Art und Weise, in der die .gitignore-Regeln angewendet werden, macht es einfach, Dateien breiter als beabsichtigt auszuschließen.

Soweit ich das beurteilen kann, waren die Annahmen, die ich über die Funktionsweise von Git gemacht habe, korrekt. In ähnlicher Weise scheint mein Fall die Kommentare von @ J-16 SDiZ zu der Rolle, die das assume-unchangedBit spielen könnte, nicht zu unterstützen (oder zu widerlegen) .

Doub1ejack
quelle
2

Wir hatten ein sehr ähnliches Problem in unserem Drupal-Site-Verzeichnis. Das Problem ist, dass die Drupal-Distribution eine .gitignore-Datei im übergeordneten Drupal-Verzeichnis enthält, die mit allen Elementen in drupal / sites / files / * übereinstimmt

Al Crowley
quelle
0

In meinem Fall .pngund .xlsxDateien wurden in der Repo ignoriert. Wie @ Doub1ejack, @ J-16 SDiZ und andere angegeben haben, müssen Sie verwenden git add -f, um die Änderungen zu verfolgen. Funktioniert jedoch nur, git add -fwenn Sie die Dateien oder Muster explizit angeben und als antworten

Nothing specified, nothing added.

Maybe you wanted to say 'git add .'?

So starten Sie die Verfolgung zuvor ignorierter Dateien oder Muster:

  1. Zunächst müssen Sie Ihr Arbeitsverzeichnis durch Eingabe in das Repository ändern cd <path>.
  2. Zweitens müssen Sie die Dateien oder Muster angeben, um sie zu verfolgen, indem Sie git add -f <file name>.extensionfür eine bestimmte Datei oder git add -f *.xlsxfür alle Excel-Dateien eingeben .

Dies ignorierte die ignorierten Dateien für meinen Fall. Sie können dieses YouTube-Video auch überprüfen .

Mehmet Yildirim
quelle