2622 Stimmen

.gitignore ignoriert alles außer ein paar Dateien

Ich weiß, dass eine .gitignore-Datei bestimmte Dateien vor der Git-Version verbirgt Kontrolle. Ich habe ein Projekt (LaTeX), das viele zusätzliche Dateien erzeugt (.auth, .dvi, .pdf, Protokolle usw.) erzeugt, aber ich möchte nicht, dass diese nachverfolgt werden.

Ich bin mir bewusst, dass ich dafür sorgen könnte (oder sollte), dass all diese Dateien in einer separaten Unterordner im Projekt ablegen könnte, da ich den Ordner dann einfach ignorieren könnte.

Gibt es jedoch eine praktikable Möglichkeit, die Ausgabedateien in der Wurzel des Projektbaums zu halten und .gitignore zu verwenden, um alles zu ignorieren, außer den Dateien mit Git verfolge? Etwas wie

# Ignore everything
*

# But not these files...
script.pl
template.latex
# etc...

20 Stimmen

Duplikat von stackoverflow.com/q/9162919/321973 (Ich weiß, dass das neuer ist, aber die Antwort dort ist richtiger). Eigentlich diese Antwort ist wahrscheinlich die beste

90voto

SuPra Punkte 7998
# ignore these
*
# except foo
!foo

44voto

frntn Punkte 601

Hatte das gleiche Problem wie OP, aber keine der 10 am höchsten bewerteten Antworten hat tatsächlich funktioniert .
Ich habe schließlich Folgendes herausgefunden

Falsche Syntax :

*
!bin/script.sh

Korrekte Syntax :

*
!bin
!bin/script.sh

Erläuterung von gitignore man-Seite :

Ein optionales Präfix "!", das das Muster negiert; jede passende Datei, die durch ein vorheriges Muster ausgeschlossen wurde, wird wieder eingeschlossen. Es ist nicht möglich, eine Datei erneut einzuschließen, wenn ein übergeordnetes Verzeichnis dieser Datei ausgeschlossen ist . Git listet aus Leistungsgründen keine ausgeschlossenen Verzeichnisse auf, so dass alle Muster für enthaltene Dateien keine Auswirkungen haben, unabhängig davon, wo sie definiert sind.

Das bedeutet, dass die obige Aussage "Falsche Syntax" falsch ist, weil bin/script.sh kann nicht wieder aufgenommen werden als bin/ wird ignoriert. Das ist alles.

Erweitertes Beispiel :

$ Baum .

.
 .gitignore
 bin
     ignore.txt
     sub
         folder
             path
                 other.sh
                 script.sh

$ cat .gitignore

*
!.gitignore
!bin
!bin/sub
!bin/sub/folder
!bin/sub/folder/path
!bin/sub/folder/path/script.sh

$ git status --untracked-files --ignored

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitignore
        bin/sub/folder/path/script.sh

Ignored files:
  (use "git add -f <file>..." to include in what will be committed)
        bin/ignore.txt
        bin/sub/folder/path/other.sh

nothing added to commit but untracked files present (use "git add" to track)

0 Stimmen

Danke Mann, das sollte die akzeptierte Antwort sein! Viel hübscher und leichter zu lesen als die anderen Beiträge

0 Stimmen

Einzige Antwort, die funktionierte; die !*/ Muster, von dem die Leute schwärmen, schien all die Ordner wieder einzuschließen, die ich versucht habe ausschließen . Aber ich bezweifle, dass diese Lösung ideal ist, wenn es viele Dateien/Unterordner gibt, die ausgeklammert werden sollen.

36voto

slatunje Punkte 1151

Um einige Dateien in einem Verzeichnis zu ignorieren, müssen Sie dies in der richtige Reihenfolge :

Ignorieren Sie zum Beispiel alles im Ordner "application" außer index.php und dem Ordner "config". Achten Sie auf die Reihenfolge .

Sie müssen das, was Sie wollen, zuerst verneinen.

FAILS

application/*

!application/config/*

!application/index.php

WERKE

!application/config/*

!application/index.php

application/*

45 Stimmen

Falsch. Sie verneinen nach dem "alles ignorieren".

3 Stimmen

Lassen Sie sich nicht täuschen von git status um zu überprüfen, ob Ihre Änderungen an .gitignore wie erwartet funktionieren

14 Stimmen

Wenn git status nicht mitteilt, was es sich ansieht und was ignoriert wird, wie können Sie dann wissen, ob es funktioniert?

25voto

Robert Munteanu Punkte 64955

Sie können verwenden git config status.showUntrackedFiles no und alle nicht verfolgten Dateien werden vor Ihnen versteckt. Siehe man git-config für Einzelheiten.

1 Stimmen

Das ist ideal, wenn Sie nur ein paar von vielen Dateien übertragen wollen!

24voto

Miladiouss Punkte 3372

Auf diese Weise behalte ich die Struktur der Ordner bei und ignoriere alles andere. Sie müssen in jedem Verzeichnis eine README.md-Datei haben (oder .gitkeep).

/data/*
!/data/README.md

!/data/input/
/data/input/*
!/data/input/README.md

!/data/output/
/data/output/*
!/data/output/README.md

0 Stimmen

Das war genau das, wonach ich gesucht hatte. Aber ist dies wirklich der einfachste Weg, um eine Datei in einem ansonsten ignorierten verschachtelten Verzeichnis zuzulassen? Meines ist mehrere Ebenen tief...

1 Stimmen

Ich denke, Sie müssen nur eine Ausnahme für diese Datei erstellen und die übergeordneten Verzeichnisse müssen folgen.

1 Stimmen

Leider ist das meiner Meinung nach der einfachste Weg, und ja, das Elternverzeichnis muss folgen, wenn das die Sache einfacher macht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X