2009-10-21 16 views
10

chcę ignorować pliki wykonywalne, które nie mają rozszerzeniegit - ignorowanie pliki w oparciu o tryb

na przykład:

gcc -o foo foo.c 

Wiem, można dodać „foo” do mojego pliku .gitignore, ale jeśli zdecyduję się zmienić nazwę pliku wykonywalnego, będę musiał zaktualizować mój plik .gitignore ...

+0

Nie można ignorować podstawy pliku w trybie (uprawnienia), ale jak mówi Jefromi, można zignorować wszystkie pliki, ale te, które mają rozszerzenie. –

Odpowiedz

8

Naprawdę najlepiej będzie, jeśli ręcznie utworzysz gitignore, prawdopodobnie. Możesz to zrobić:

* 
!*.* 

aby wykluczyć wszystko, a następnie dołączyć wszystko za pomocą ".", Ale podejrzewam, że twoje katalogi nie mają rozszerzeń. Obecnie śledzone katalogi będą oczywiście śledzone, ale jeśli dodałeś nowe, git-status nie zobaczyłoby go, a musiałbyś użyć add -f, aby go pobrać.

Prawdopodobnie nie jest dobrze przyjąć wszystko Pliki bez rozszerzeń nie powinny być śledzone. Może się to skończyć w sposób naturalny - na przykład README i INSTALL są dość powszechne. Jest o wiele gorsze, aby przypadkowo zignorować plik, niż zmodyfikować gitignore. Modyfikacja gitignore może potrwać kilka sekund, ale będzie to oczywiste, kiedy będziesz tego potrzebować. Jeśli przypadkowo zignorujesz plik, możesz go łatwo nie sprawdzić i stracić pracę.

10

Zwykle obsługuję to za pomocą makefile hacks. W moim Makefile mam nazwę pliku wykonywalnego $ (nazwa), a następnie zrobić to:

#first rule 
all: gitignoreadd ... more depends 
    ... some commands ... 

gitignoreadd: 
    grep -v "$(name)" .gitignore > temp 
    echo $(name) >> temp 
    mv temp .gitignore 

gitignoreremove: 
    grep -v "$(name)" .gitignore > temp 
    mv temp .gitignore 

Zasada ta może następnie być tylko zależność od marki gdzieś odpowiedni. Następnie zwykle masz regułę "czyszczenia", jak następuje:

clean: gitignoreremove 
    rm *.o *.othergarbagefiles $(name) 

To powinno wystarczyć. To hack, ale działa dla mnie. Jedyne, co musisz zrobić, to wyczyścić program, zanim zmienisz nazwę, aby automatycznie wszystko wyczyścić.