2012-06-04 11 views
34

Chcę automatycznie wykluczyć 2 pliki z zatwierdzenia, które są częścią repozytorium git, ale mają pewne zmiany, które nie powinny być częścią repozytorium github, ponieważ mają pewne zmiany które mają znaczenie tylko dla mojego lokalnego systemu, a nie dla innych programistów.git nie ignoruje 2 specjalnie nazwanych plików

dodałem je do .git/info/exclude w nadziei git wie, że nie powinien zatwierdzić zmiany do nich:

# 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 
# *~ 

ale git status nadal je wymienia jako wystawił za popełnienie:

# 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 nie chcesz ich regularnie uruchamiać za każdym razem (za każdym razem mogę zapomnieć), jak mogę to zrobić?

+2

Dlaczego nie '.gitignore'? – maverik

+5

Nie można ignorować plików, które śledzisz. Prawdopodobnie musisz znaleźć inny sposób zarządzania informacjami specyficznymi dla lokalnego systemu, np. Pliki "szablonów", które generujesz lub ręcznie edytujesz pliki konfiguracyjne. –

+2

@maverik: jeśli 'exclude' nie działa,' .gitignore' też nie będzie. Przypadkiem użycia dla opcji "wyklucz" jest to, że ta informacja jest lokalna, podczas gdy '.gitignore' może być rejestrowane i udostępniane. Weź 'exclude' dla swoich lokalnych rzeczy, gdy nie chcesz wysadzić' .gitignore'. Wyobraź sobie duży projekt, w którym każdy programista umieszcza swoje wykluczenia w ".gitignore". Nie będzie już można nim zarządzać ... – eckes

Odpowiedz

92

To, czego chcesz, to zignorowanie zmian na śledzonych plikach. Nie można tego osiągnąć (jako says) poprawnie, ani z .gitignore, ani z .git/info/exclude.

Musisz użyć git update-index:

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

będzie osiągnąć to, co chcesz: pliki są zawsze zakłada się na niezmienionym poziomie.

Jeśli chcesz ponownie śledzić zmiany w tych plikach, użyj --no-assume-unchanged.

Wreszcie, jeśli chcesz wiedzieć, które pliki są aktualnie w trybie --assume-unchanged, zapytać git dla

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

Działa doskonale dla mnie! – Gustyn

+1

Otrzymuję 'fatal: Nie można oznaczyć pliku {ścieżka/do/pliku}' – Leo

+0

czy to rozwiązanie jest powiązane z odgałęzieniem? Niech plik1 i plik 2 są oznaczone jako "załóż-niezmienione" w gałęzi1. Następnie zapłać do oddziału2. Czy te pliki są również oznaczone jako "założyć-niezmienione"? – nespapu

Powiązane problemy