Z powodu zewnętrznych dziwnych ograniczeń nie mogę zmodyfikować pliku .gitignore mojego repozytorium. Czy istnieje sposób na zignorowanie plików i katalogów innych niż modyfikowanie .gitignore? Nawet jeśli jest to globalne rozwiązanie, takie jak globalna konfiguracja, które zostanie zastosowane do wszystkich moich repozytoriów.W jaki sposób Git ignoruje pliki bez użycia .gitignore?
Odpowiedz
Nie zapomnij, według gitignore, że istnieje porządek pierwszeństwa w różnych „ignoruj źródeł wzorcem”, że Git rozważyć:
- Patterns odczytać z wiersza polecenia dla tych poleceń, które je obsługują.
- Wzorce odczytywane z pliku .gitignore w tym samym katalogu, co ścieżka lub w dowolnym katalogu nadrzędnym, z wzorami w plikach wyższego poziomu (do katalogu głównego) nadpisanymi przez pliki niższego poziomu aż do katalogu zawierającego plik.
- Wzory z
$GIT_DIR/info/exclude
. - Wzory odczytywane z pliku określonego przez zmienną konfiguracyjną
core.excludesfile
.
Dwa ostatnie może być rozwiązaniem dla problemu, ale:
- oni nie są replikowane do odległego repozytorium
- oni mogą mieć swoje wzorce zastąpione przez inne źródła
(Zobacz także ten SO question)
Pozostałe dwa rozwiązania obejmują aktualizację indeksu (git update-index
):
git update-index --assume-unchanged
patrz: "Git: untrack a file in local repo only and keep it in the remote repo".
Jest wymienione przez Elijah Lynn w the comments.- Można nawet zignorować zawartość folderu: "
git update-index --assume-unchanged
on directory". - Aby odwrócić efekt, użyj
--no-assume-unchange
: Patrz "Is it possible togit add
a file currently protected byassume-unchanged
?".
- Można nawet zignorować zawartość folderu: "
Jednak, gdy ty kasa inny oddział lub gdy git pull
, że „ignoruj” status może zostać zresetowane. Stąd druga opcja:
git update-index --skip-worktree
; patrz:
Różnica pomiędzy nimi jest to opisane w "Git - Difference Between 'assume-unchanged
' and 'skip-worktree
'".
Jeśli możesz zmodyfikować .git/info/exclude
, możesz umieścić tam te same reguły. Ale ten plik znajduje się tylko w lokalnym repozytorium.
Brzmi to jak to jest chyba najlepiej; pozwól, że wykluczysz pliki z lokalnego repozytorium. – Abizern
Jak to działa w przypadku submodułów? Nie ma katalogu '.git' w module podległym ... – zakdances
@twoja frekwencja folderu' .git' modułu podrzędnego jest aktualnie w 'parent_repo/.git/modules/submodule_name'. Więc możesz edytować 'parent_repo/.git/modules/submodule_name/info/exclude' –
Istnieją trzy sposoby, aby powiedzieć GIT który plików ignorować:
- pliki .gitignore
- $ GIT_DIR/.git/info/wyłączyć
- Pliki wskazywanego przez
core.excludesfile
zachodzącego
Dwa ostatnie punkty mogą rozwiązać problem.
Aby uzyskać więcej informacji, zobacz gitignore(5).
ignorowanie lokalnych zmian śledzonych plików: git update-index --assume-unchanged my-file.php
nieignorowanie lokalne zmiany w plikach śledzone: git update-index --no-assume-unchanged my-file.php
źródło: git help update-index
--[no-]assume-unchanged
...
This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked
files (akin to what .gitignore does for untracked files). Git 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.
Jeśli chcesz po prostu mieć kilka lokalnych plików repozytorium i lokalizacja podkatalogu jest elastyczna, możesz umieścić swoje pliki w tracked_dir1/tracked_dir2/untracked_dir/
, a następnie dodać tracked_dir1/tracked_dir2/untracked_dir/.gitignore
z treścią jak:
*
Tj
$ cat > tracked_dir1/tracked_dir2/untracked_dir/.gitignore
*
<Ctrl+D>
Można użyć globalną metodę gitignore zamiast modyfikowania jednego w projekcie https://help.github.com/articles/ignoring-files/#create-a-global-gitignore
Możesz użyć' update-index --assume-unchanged' @ see http://stackoverflow.com/a/25253144/292408 –
@ ElijahLynn pewny. Masz również 'update-index --skip-work-tree'. Ja jave zredagowałem odpowiedź, aby dodać kilka linków do moich starych odpowiedzi ilustrujących te dwa polecenia 'update-index'. – VonC
Słodki, --skip-work-tree jest bardzo przydatny, dzięki! –