2012-05-16 1 views
7

Nach der Lektüre einige Fragen über .gitignore ich niemanden gefunden haben, verwenden, die meine Frage beantworten könnte:ignorieren bestimmte Dateien in allen Ordnern eine einzelne Datei .gitignore

Was muss ich hinzufügen alle Dateien mit .gitignore zu ignorieren ein bestimmtes Ende, sagen *.txt in allen Ordnern.

Ich hätte lieber nur eine .gitignore Datei auf höchster Ebene.

Ich versuchte mehrere Dinge, aber keine funktionierte. Diese

ist, was ich getestet (.gitignore wurde vor dem Repository hinzugefügt wurde keine andere Datei hinzugefügt):

$ ls 
    abc.txt content 

    $ ls content/ 
    abc.txt def.other def.txt 

    $ echo "" > .gitignore 


    $ git status --ignored --untracked-files=all 
    # On branch master 
    # Changes not staged for commit: 
    # (use "git add <file>..." to update what will be committed) 
    # (use "git checkout -- <file>..." to discard changes in working directory) 
    # 
    #  modified: .gitignore 
    # 
    # Untracked files: 
    # (use "git add <file>..." to include in what will be committed) 
    # 
    #  abc.txt 
    #  content/abc.txt 
    #  content/def.other 
    #  content/def.txt 
    no changes added to commit (use "git add" and/or "git commit -a") 

Dies wird als erwartet: alle Dateien angezeigt, da .gitignore leer.

$ echo "*.txt" > .gitignore 

    $ git status --ignored --untracked-files=all 
    # On branch master 
    # Changes not staged for commit: 
    # (use "git add <file>..." to update what will be committed) 
    # (use "git checkout -- <file>..." to discard changes in working directory) 
    # 
    #  modified: .gitignore 
    # 
    # Untracked files: 
    # (use "git add <file>..." to include in what will be committed) 
    # 
    #  content/def.other 
    # Ignored files: 
    # (use "git add -f <file>..." to include in what will be committed) 
    # 
    #  abc.txt 
    no changes added to commit (use "git add" and/or "git commit -a") 

Warum nicht die Dateien Inhalt/abc.txt und Inhalt/def.txt in der Liste auftauchen?

Ich dachte, sie würden auch hier auftauchen.

$ echo "" > .gitignore 

    $ git clean -n 
    Would remove abc.txt 
    Would not remove content/ 

    $ cd content 

    $ git clean -n -x 
    Would remove def.other 

    $ git clean -n -x 
    Would remove abc.txt 
    Would remove def.other 
    Would remove def.txt 

Wenn die Dateien Inhalt/abc.txt und Inhalt/def.txt von clean -n -x gezeigt werden, aber nicht durch clean -n, ich glaube, sie werden ignoriert. Aber warum tauchen sie dann nicht in auf?

Antwort

3

Nur Hinzufügen *.txt funktioniert. Überprüfen Sie gitignore(5) man page für die Gitignore-Format Erklärung

Wenn Sie versuchen, die content Verzeichnis hinzufügen, werden alle *.txt Datei ignoriert.

$ echo "*.txt" > .gitignore 

$ git add content 

$ git status --ignored --untracked-files=all 
# On branch master 
# 
# Initial commit 
# 
# Changes to be committed: 
# (use "git rm --cached <file>..." to unstage) 
# 
#  new file: content/def.other 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
#  .gitignore 
# Ignored files: 
# (use "git add -f <file>..." to include in what will be committed) 
# 
#  abc.txt 
#  content/abc.txt 
#  content/def.txt 
+1

Es scheint, dass der Grund, weil 'git status --ignored --untracked-files = all' wird diese Dateien in Ihrem Test hat etwas nicht zeigen, mit dem zu tun,„Verzeichnis nicht verfolgt werden“(man kann tatsächlich Verfolge keine Verzeichnisse, nur Dateien, aber wenn ich eine Datei innerhalb des Verzeichnisses aufspürte, in dem sie auftauchten – KurzedMetal

+0

Das hat funktioniert. Seltsam, dass 'git clean -fx' nur die Dateien im Inhalt löscht, nachdem der Ordner eine verfolgte Datei enthielt. Ansonsten musste ich den Befehl im Ordner selbst aufrufen, um die Dateien zu entfernen! – Onur