2012-06-04 7 views
34

Ich möchte automatisch 2 Dateien vom Commit ausschließen, die Teil des Git-Repository sind, aber einige Änderungen haben, die nicht Teil des Github-Repos sein sollten, da sie einige Änderungen enthalten das sind nur für mein lokales System und nicht die anderen Entwickler sinnvoll.git ignoriert 2 speziell benannte Dateien nicht

Ich habe sie zu .git/info/exclude in der Hoffnung, git versteht, dass er keine Änderungen an ihnen begehen sollte:

# git ls-files --others --exclude-from=.git/info/exclude 
# Lines that start with '#' are comments. 
# For a project mostly in C, the following would be a good set of 
# exclude patterns (uncomment them if you want to use them): 
# *.[oa] 
a.conf 
b.conf 
# *~ 

aber git status noch sie als inszenierte Listen für die Begehung:

# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
# modified: build/conf/a.conf 
# modified: build/conf/b.conf 
# 

I don Ich möchte sie nicht regelmäßig mit jedem Commit auflösen (einmal würde ich es einfach vergessen), wie kann ich das machen?

+2

Warum nicht '.gitignore'? – maverik

+5

Sie können Dateien, die Sie verfolgen, nicht ignorieren. Sie müssen wahrscheinlich eine andere Möglichkeit finden, lokale systemspezifische Informationen zu verwalten, wie zum Beispiel "Template" -Dateien, die Sie generieren oder von denen Sie Konfigurationsdateien manuell bearbeiten. –

+2

@maverik: Wenn 'exclude' nicht funktioniert, wird' .gitignore' auch nicht. Der Anwendungsfall für "Ausschließen" ist, dass diese Information lokal ist, während ".gitignore" eingecheckt und geteilt werden kann. Nimm 'exclude' für deine lokalen Sachen, wenn du das' .gitignore' nicht sprengen willst. Stellen Sie sich ein großes Projekt vor, bei dem jeder Entwickler seine Excludes in '.gitignore' eingibt. Es würde nicht mehr managable werden ... – eckes

Antwort

92

Sie möchten Änderungen an verfolgten Dateien ignorieren. Dies kann nicht korrekt erreicht werden (wie Charles Baileysays), weder mit .gitignore noch mit .git/info/exclude.

Sie müssen git update-index verwenden:

git update-index --assume-unchanged build/conf/a.conf 
git update-index --assume-unchanged build/conf/b.conf 

wird erreichen, was Sie wollen: die Dateien werden immer unverändert übernommen. Wenn Sie Änderungen in diesen Dateien erneut verfolgen möchten, verwenden Sie --no-assume-unchanged.

Schließlich, wenn Sie Dateien wissen möchten, welche zur Zeit im --assume-unchanged Modus sind, fragen Sie git für

git ls-files -v | grep -e "^[hsmrck]" 
+0

Funktioniert gut für mich! – Gustyn

+1

Ich bekomme 'fatal: Kann Datei nicht markieren {Pfad/zu/Datei}' – Leo

+0

ist diese Lösung an einen Zweig gebunden? Sei Datei1 und Datei2 in Branch1 als "angenommen-unverändert" markiert. Dann kassiere nach branch2. Sind diese Dateien auch als "angenommen-unverändert" markiert? – nespapu

Verwandte Themen