Git: Ignoruj ​​śledzone pliki

182

Mam kilka śledzonych plików w repozytorium, które są automatycznie modyfikowane podczas budowania kodu. Nie chcę ich usuwać, po prostu nie chcę, aby pojawiały się jako zmodyfikowane i nie chcę, aby były wystawiane podczas dodawania git.

czy to możliwe?

haymansfield
źródło
7
możliwy duplikat gita: czy mogę zatwierdzić plik i zignorować zmiany zawartości?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
5
Jeśli te pliki są generowane automatycznie przez kompilację, nie powinny być śledzone w git.
Codebling
Oto krótki samouczek dotyczący gitignore, który może Ci się przydać: learningpassion.wordpress.com/2016/06/17/ ...
joker

Odpowiedzi:

283

Pewnie.

git update-index --assume-unchanged [<file> ...]

Aby cofnąć i ponownie rozpocząć śledzenie:

git update-index --no-assume-unchanged [<file> ...]
Nick Veys
źródło
3
Co się stanie z plikami w tym stanie, jeśli pobiorę do nich modyfikacje?
haymansfield
2
@haymansfield Strona pomocy dla polecenia zawiera następujące informacjeGit will fail (gracefully) in case it needs to modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is changed upstream, you will need to handle the situation manually.
Parham
3
Jakikolwiek sposób ubiegania się --assume-unchangedo klonowanie? Aby wszyscy użytkownicy mieli pliki, ale nie widzieli lokalnych zmian w nich w różnicach.
Gauthier
10
@Tyler - nie, gdy plik jest śledzony przez git, zawsze będzie śledzony, nawet jeśli ten plik pojawi się w .gitignore. Mój przypadek użycia to coś w stylu „oto podstawowy szablon pliku, w którym będziesz przechowywać swoje dane uwierzytelniające, teraz nigdy go nie zatwierdzaj”.
Jon V
5
@watbywbarif Mam polecenie git update-index --no-assume-unchanged $(git ls-files $(git rev-parse --show-toplevel))ustawione jako alias git. Zawsze, gdy podejrzewam, że to niektóre z tych oszustw, po prostu to robię.
Philippe Carphin
6

Innym podejściem (z usuniętej już odpowiedzi Setha Robertsona, ale okazało się, że jest to pomocne, więc wskrzeszenie jej) polega na utrzymaniu „śledzonego” pliku szablonu, a następnie posiadaniu jego lokalnej wersji bez śledzenia, np. „Config.sample.ini” lub „ config.ini.template ”, zobacz https://gist.github.com/canton7/1423106, aby zapoznać się z pełnym przykładem.

Wtedy nie będzie żadnych obaw, jeśli plik zostanie zmieniony w git, itp. I możesz użyć .gitignore (ostatecznie) na lokalnych nieśledzonych plikach.

rogerdpack
źródło
5

Kolejne rozwiązanie wykorzystujące atrybuty git i% f w poleceniu filter:

git config filter.orig.clean "cat %f.orig"
cp filename filename.orig
echo "filename filter=orig" >> .git/info/attributes
echo "filename.orig" >> .git/info/exclude
koct9i
źródło
16
Czy mógłbyś podać więcej szczegółów na temat tego, co to oznacza i co robi przez przypadek?
rogerdpack
to dodaje filtr dla pliku, który czyta zawartość z pliku ".orig", który ma oryginalny tekst
koct9i