2009-05-19 11 views
38

Czy istnieje sposób, aby zignorować zmiany niektórych plików na commit z mercurial?Czy jest opcja ignorowania-na-commit w mercurial?

Mam konkretną sytuację, w której mamy domyślny plik tnsnames.ora, który wskazuje 127.0.0.1, ale niektórzy programiści zmodyfikują go tak, aby wskazywał na inne systemy, ale nie chcemy zmieniać domyślnych plik.

W subversion, dodałem to prosto do listy zmian ignorowanych przy użyciu commit. Czy istnieje sposób robienia tego w sposób rtęciowy?

Odpowiedz

48

Jeśli pliki, które chcesz pominąć z polecenia "hg commit", są już "śledzone", powinieneś użyć opcji -X. Wzór przekazany do -X jest bardzo elastyczny, dzięki czemu możliwe do uruchomienia na przykład:

% hg stat 
A etc/foo.conf 
M src/bar.c 
M lib/libbar/loader.c 
% hg commit -X '**.conf' 

aby uniknąć popełnienia dowolny plik z rozszerzeniem „.conf”, niezależnie od tego, jak głęboko w drzewie źródłowym żyje. W powyższym obszarze roboczym będzie to oznaczać "src/bar.c" i "lib/libbar/loader.c", ale nie "etc/foo.conf".

Aby wykluczyć wielu wzorców nazw plików, korzystania z wielu opcji -x tj .:

% hg commit -X '**.conf' -X '**.sh' 
+8

Zobacz "wzorce pomocy hg", aby uzyskać informacje o wzorach stylów "**. Conf". –

+0

Czy istnieje sposób na trwałe? Nie chcę -X na każdym zatwierdzeniu. – Kugel

+0

@Kugel Nie wygląda na to. Mercurial uderza mnie jako kiepski wybór dla bazy kodowej z podobnymi 20 plikami konfiguracyjnymi, które zawierają wszystkie specyficzne dla użytkownika rzeczy. Nie powinienem pisać skryptów, aby kontrola wersji działała dla mnie, a nie przeciwko mnie. I nie, 20 plików konfiguracyjnych też nie było moim pomysłem. Zgaduję, że ten facet również wybrał Mercurial. –

-2

Poszukaj pliku .hgignore w dokumentacji Mercurial.

Oto przykład ignorowania pliku.

 # use glob syntax. 
     syntax: glob 

     *.elc 
     *.pyc 
     *~ 

     # switch to regexp syntax. 
     syntax: regexp 
     ^\.pc/ 
+0

plik tnsnames.ora jest już sprawdzone. Ja chce ignorować moje lokalnych zmian, ponieważ są one tylko moim komputerze. Właśnie dlatego .hgignore nie działa –

1

Można alias zobowiązać się do czegoś jak „hg popełnić -X excluded_file.ext” Nigdy nie używany Mercurial, więc ja po prostu się przez stronę człowieka tutaj.

21

Tradycyjnie rozwiązuje się to przez brak wersji samego pliku, ale przez wersjonowanie jego kopii jako szablonu dla innych użytkowników.

Więc musisz hg mv tnsnames.ora tnsnames.ora-template, następnie zatwierdzić, a następnie wykonać prostą kopię systemu plików tnsnames.ora-template na tnsnames.ora i dodać tnsnames.ora do pliku .hgignore.

Kolejne zmiany w szablonie będą nadal wysyłane, ale nie zmienią środowiska pracy, chyba że ktoś skopiuje szablon do rzeczywistego pliku.

+1

Więc jeśli masz app.config i zmienisz nazwę na app.config-template, nie będzie już app.config w repozytorium. Spowoduje to problemy z automatyczną kompilacją. Zakładam, że proces budowania musi zostać poinformowany o tym "szablonie" i zmienić jego nazwę. To nie jest takie wspaniałe. – AndyM

+2

Nie chcesz zmieniać nazwy, chcesz ją skopiować i zmodyfikować. Możesz to zrobić ze skryptów autobuildu lub możesz zrobić to z haka, ale tak czy owak, jeśli masz pliki, które będą się różnić od klonu klonowania, to będzie musiała być jakaś inteligencja zastosowana gdzieś. – Zed

Powiązane problemy