Hinzufügen trotz der .gitignore-Datei erzwingen


412

Gibt es eine Möglichkeit, gitdas Hinzufügen einer Datei trotz der .gitignoreDatei zu erzwingen ?


4
Eine bessere Frage könnte sein - warum sollten Sie das tun wollen? Wenn Sie möchten, dass eine Datei verfolgt wird, deaktivieren Sie sie (stellen Sie dem Muster in der .gitignoreDatei !z !dont/ignore/this/file. B. das Präfix voran ).
Ohad Schneider

6
@OhadSchneider Dies ist nützlich, wenn Sie Commit-Build-Dateien für einen anderen Zweig erzwingen. Einige Projekte wie StrongLoop für sichere Bereitstellungen tun dies
Deminetix

5
@OhadSchneider Für uns liegt es eher daran, dass die meisten Entwickler git mit Visual Studio 2015 installieren, wodurch dem Benutzerordner ein globaler gitignore hinzugefügt wird. Dies schließt Dateien wie * .dll und * .exe aus. Das ist großartig für unsere neuen Projekte, die nur Nuget-Pakete verwenden, die während der Erstellung abgerufen werden. Für eine kleine Anzahl älterer Projekte verwenden wir jedoch weiterhin DLLs, auf die in der Lösung manuell verwiesen wird. Für diese Projekte möchten wir sie manuell einfügen, anstatt jedem Entwickler zu sagen, dass er die Dateien * .dll und * .exe im globalen Gitignore kommentieren soll.
Nullius

4
@Nullius Kannst du sie nicht einfach auf einer höheren Ebene aufheben .gitignore(z. B. eine .gitignoreim selben Ordner wie die DLL oder eine darüber oder so hinzufügen )?
Ohad Schneider

Antworten:


568

Siehe man git-add:

   -f, --force
       Allow adding otherwise ignored files.

Führen Sie dies aus

git add --force my/ignore/file.foo

11
Ähm, das funktioniert nicht, im Git-Status wird die Datei immer noch nicht angezeigt
Mark

5
Nun, ich habe es getestet, um sicherzustellen, dass es wirklich funktioniert und funktioniert. Können Sie Ihre Umgebung beschreiben (Betriebssystem, Git-Version ...)? Dies ist, was ich im Grunde getan habe: echo "/foo" >> .gitignore; echo "bar" > foo; git add foo # should throw an error; git add -p foo # works(kann keine Zeilenumbrüche in Kommentare einfügen, führen Sie die Befehle 1 mal 1 aus
Daniel Böhmer

4
Das gleiche passierte mir, ich hatte zuvor git update-index --asume-unverändert für meine Dateien ausgeführt. Ich musste es mit
Jako

4
Dies funktioniert nur bei Verwendung von Platzhaltern unter Verwendung von Git 1.9.5 unter Windows, selbst nachdem ich versucht habe, --no - unverändert anzunehmen. "git add - f <Dateiname>" macht nichts, aber "git add -f *" funktioniert. Die Verwendung von TortoiseGit funktioniert ebenfalls.
Mhenry1384

@ mhenry1384 Der Grund, warum es nur unter Windows für Platzhalter funktioniert, liegt möglicherweise in der Verwendung des Pfadtrennzeichens. Bei mir funktioniert Schrägstrich "/", Backslash "\" jedoch nicht. Die Tatsache, dass cmd / PowerShell für uns "/" in "\" konvertiert, macht es einfach, darauf zu stoßen.
Oh,

19

Trotz der Arbeitslösung von Daniel Böhmer bot Ohad Schneider in einem Kommentar eine bessere Lösung an:

Wenn die Datei normalerweise ignoriert wird und Sie das Hinzufügen erzwingen, kann sie in Zukunft versehentlich erneut ignoriert werden (z. B. wenn die Datei gelöscht wird, wird ein Commit durchgeführt und die Datei neu erstellt.

Sie sollten es einfach in der .gitignore-Datei wie folgt ignorieren : Unignore-Unterverzeichnisse ignorierter Verzeichnisse in Git


4
Das ist richtig. Ich habe die Option --force für kleine Datendateien verwendet, dann ein bisschen Ordnerstruktur neu angeordnet und alle erzwungenen Dateien überlastet. JEDOCH: Bei .gitignoreVerwendung !specific-file-name.txtohne Ordnerhierarchie folgt die Verfolgung auf diese Weise der Datei um das Repo.
Merlin

Es hängt vom Szenario ab, z. B. manchmal möchten Sie "1.txt" in allen Ordnern ausschließen, und manchmal "Ordner1 / *. Txt"
AS

14
Das ist keine "bessere" Lösung. Es ist eine Lösung für ein anderes Problem.
aij

2

Eine andere Möglichkeit, dies zu erreichen, besteht darin, die Gitignore-Datei vorübergehend zu bearbeiten, die Datei hinzuzufügen und dann den Gitignore zurückzusetzen. Ein bisschen hacky fühle ich mich


10
Ich stimme zu, das ist nicht was du tun willst.
Merlin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.