Utworzyłem domyślną wersję pliku zawartego w repozytorium git. Ważne jest, aby gdy ktoś sklonował repozytorium, otrzymał kopię tego pliku. Chciałbym jednak ustawić git tak, aby później ignorował zmiany w tym pliku. .gitignore
działa tylko na nieśledzonych plikach.
Moją motywacją jest to, że ten plik zawiera informacje specyficzne dla maszyny. Chciałbym podać wartości domyślne, jednocześnie pozwalając ludziom na dokonywanie lokalnych zmian, które nie zostaną wypchnięte z powrotem do repozytorium pochodzenia, tworząc konflikty scalania, gdy pobieramy nowe zmiany.
Generalnie jesteśmy dość leniwi i git add .
dużo używamy , więc jestem prawie pewien, że jeśli nie mogę powiedzieć gitowi, aby zignorował ten plik, zmiany w nim zostaną zatwierdzone i wypchnięte.
Podsumowując,
- Chciałbym utworzyć plik, nazwać go,
default_values.txt
który jest dodawany do mojego repozytorium git i jest uwzględniany, gdy ktoś sklonuje to repozytorium. git add .
nie powinien dodawaćdefault_values.txt
do zatwierdzenia.- To zachowanie należy przekazać do wszystkich klonów repozytorium.
źródło
Odpowiedzi:
Jak wielu innych wspomniało, dobrym nowoczesnym rozwiązaniem jest:
To zignoruje zmiany w tym pliku, zarówno lokalne, jak i nadrzędne, dopóki nie zdecydujesz się na nie ponownie za pomocą:
Możesz uzyskać listę plików oznaczonych jako pominięte:
Zauważ, że w przeciwieństwie do tego
--skip-worktree
,--assume-unchanged
status zostanie utracony po ściągnięciu zmiany nadrzędnej.źródło
--no-skip-worktree
aby dodać zmiany.--skip-worktree
statusu pliku przed przełączeniem gałęzi, jeśli ten sam plik jest śledzony w innej gałęzi.git status
, ale jak próbowałem się wymeldować do innego oddziału, mamerror: Your local changes to the following files would be overwritten by checkout:
nawet -f nie pomagaerror: Entry 'wix-stores-merchant-app/demo/credentials.js' not uptodate. Cannot merge.
git ignore
igit unignore
.To, czego szukasz, to
git update-index --assume-unchanged default_values.txt
.Więcej informacji można znaleźć w dokumentacji: http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html
źródło
skip-worktree
zamiastassume-unchanged
więcej informacji stackoverflow.com/questions/13630849/ ...Podejście, które ogólnie widziałem, polega na utworzeniu pliku o innej nazwie, np. Default_values_template.txt i umieszczeniu default_values.txt w swoim .gitignore. Poinstruuj ludzi, aby skopiowali default_values_template.txt do default_values.txt w ich lokalnych obszarach roboczych i wprowadzili potrzebne zmiany.
źródło
.sample
sufiksu. A więc w twoim przypadkudefault_values.txt.sample
Przyjrzyj się rozmaitym / czystym skryptom. W ten sposób możesz kontrolować wersję pliku, ale kiedy jest on wyewidencjonowany, będziesz go „rozmazać”, zastępując dane ogólne / zastępcze danymi specyficznymi dla maszyny w pliku.
Po zatwierdzeniu go „wyczyścisz”, zastępując informacje specyficzne dla maszyny informacjami ogólnymi lub informacjami zastępującymi.
Rozmyte / czyste skrypty muszą być deterministyczne w tym sensie, że ich wielokrotne stosowanie w różnej kolejności będzie równoznaczne z uruchomieniem ostatniego w sekwencji.
To samo można zastosować z hasłami, jeśli chcesz ujawnić swoje repozytorium, ale zawartość może zawierać poufne informacje.
źródło
user.json
którą należy nadpisać za pomocą każdego napisu dewelopera, ale nie chcę, aby deweloper przypadkowo sprawdzał swoje dane.Rozwiązałem ten problem, definiując „czysty” filtr, który po prostu umieszcza zawartość pliku w indeksie.
git show :path/to/myfile
powinniśmy po prostu wydrukować zawartość indeksu dla określonego pliku, abyśmy mogli użyć tego w skrypcie, aby zastąpić kopię roboczą nietkniętą kopią w indeksie:Ustaw go jako „czysty” filtr dla danego pliku (zakładając, że umieściłeś go w „discard_changes”):
Niestety nie mogę znaleźć sposobu na uogólnienie tego dla wielu plików, ponieważ nie ma sposobu, aby stwierdzić, który plik przetwarzamy z wnętrza czystego skryptu. Oczywiście nic nie stoi na przeszkodzie, aby dodać inną regułę filtrowania dla każdego pliku, ale jest to trochę niewyraźne.
źródło
Znalazłem rozwiązanie, które działa dla mojego zespołu. Udostępniamy nasze githooki za pośrednictwem linków symbolicznych i po dodaniu pliku szablonu do gita dodałem hak przed zatwierdzeniem, który sprawdza, czy plik szablonu został zmodyfikowany, a jeśli tak, to ja
git reset -- templatefile.txt
. Jeśli jest to jedyny zmieniony plik, również przerywam zatwierdzanie.źródło
Proponuję zajrzeć do podmodułów. Jeśli umieścisz pliki specyficzne dla komputera w module podrzędnym, git add powinien je zignorować.
źródło