Mam katalog tmp w repozytorium git, który chciałbym nadal istnieć, ale zostałbym zignorowany. Dodałem go do .gitignore
, ale git status
nadal informuje mnie o zmianach w plikach w tym katalogu. Próbowałem git rm -r --cached
, ale to usuwa go ze zdalnego repozytorium. Jak mogę zatrzymać śledzenie zmian w tym katalogu, ale nadal pozwolić mu istnieć? Muszę to również zrobić dla 1 pliku, ale zmiany w tym również pojawiają się git status
po .gitignore
nich. Co powinienem zrobić?
git
version-control
21312312
źródło
źródło
Odpowiedzi:
Zamiast tego
.gitignore
możesz zaktualizować lokalne repozytorium git, uruchamiając następujące polecenie:W tym przypadku plik jest śledzony w repozytorium pochodzenia. Możesz go zmodyfikować w swoim lokalnym repozytorium, a git nigdy nie oznaczy go jako zmienionego. Przeczytaj więcej na:
źródło
git update-index --no-assume-unchanged <file>
. Jeśli chcesz je wymienićgit ls-files -v | grep '^h'
.Dokładnym celem jest ignorowanie zmian wprowadzonych w plikach przy jednoczesnym umożliwieniu im istnienia
.gitignore
. Więc dodanie plików (lub katalogów) do.gitignore
jest jedyną rzeczą, którą musisz zrobić.Ale twój problem polega na tym, że git już śledzi pliki, które chcesz zignorować i
.gitignore
nie ma zastosowania do śledzonych plików. Jedynym sposobem na zatrzymanie tego śledzenia jest poinformowanie git o ich usunięciu. Używającgit rm --cached
, zapobiegasz usuwaniu plików lokalnych przez git, ale każde inne repozytorium, do którego otrzymasz zmiany, zastosuje usunięcie. Nie sądzę, aby można było tego uniknąć z własnego repozytorium. Musisz coś zrobić na innych repozytoriach lub zaakceptować, że pliki zostaną usunięte.Aby zapobiec usuwaniu się w innym repozytorium, możesz:
git rm --cached
pliki i zatwierdź je przed ściągnięciem zmian. Git ładnie połączy dwie usunięcia bez dotykania już nieśledzonych plików.źródło
git update-index --assume-unchanged <file>
. Spójrz na: blog.pagebakers.nl/2009/01/29/…git rm --cached <filename> -r
po tym wypchnięciu ponownie zmienia się repozytorium, więc plik jest usuwanyUmieść znak
/
na końcu nazwy katalogu w swoim.gitignore
pliku, tjJeśli śledziłeś pliki w tym katalogu, musisz powiedzieć gitowi, aby najpierw o nich zapomniał (zanim dodasz katalog do listy ignorowanych). Zakładając, że nie masz tam nic istotnego (tj. Że możesz to porysować):
Nowe pliki w tym katalogu nie będą śledzone.
--cached
Opcjagit rm
działa tylko na indeks (w trakcie zmiany bardziej lub mniej). Nie ma to wpływu na drzewo robocze ani status tego, co było śledzone lub nie.źródło
the/dir/
ithe/dir/*
.gitignore nie ma wpływu na śledzone pliki.
To, czego chcesz, to ustawienie bitu zakładającego niezmieniony dla plików w katalogu tmp /. Oto dobre wyjaśnienie, jak to zrobić: Git: odśledzić plik tylko w lokalnym repozytorium i zachować go w zdalnym repozytorium
Również jednowierszowe do ustawienia zakładaj-niezmienione dla wszystkich plików w katalogu - git update-index --assume-niezmienione w katalogu .
źródło
Wygląda na to, że próbujesz śledzić plik (np.
index.php
), Dodać go do zdalnego repozytorium, a następnie przestać go śledzić, zachowując plik w zdalnym (tj. Zachowajindex.php
niezmieniony plik w zdalnym repozytorium, zmieniając go lokalnie).Z tego, co rozumiem, git nie może tego zrobić. Możesz śledzić plik lub nie. Jeśli śledzisz plik, istnieje on w zdalnym repozytorium i zmienia się po zatwierdzeniu zmian. Jeśli nie śledzisz pliku, nie ma go w zdalnym repozytorium.
Ponieważ nie jest możliwe zrobienie dokładnie tego, co chcesz z git, istnieją potencjalnie inne rozwiązania, w zależności od konkretnej sytuacji. Na przykład, dlaczego nie chcesz
index.php
zmieniać zdalnie, kiedy zmieniasz to lokalnie? Czy plik zawiera ustawienia specyficzne dla użytkownika? W takim przypadku możesz:Teraz edytuj plik index_template.php, aby wyglądał tak, jak chcesz, aby pojawił się w zdalnym repozytorium. Dodaj coś do swojego README, aby powiedzieć ludziom używającym twojego repozytorium, że po sklonowaniu go muszą skopiować plik index_template.php do index.php i edytować go zgodnie ze swoimi potrzebami.
Kiedy ktoś sklonuje Twoje repozytorium, musi utworzyć własne
index.php
. Zrobiłeś to dla nich łatwe: wystarczy skopiowaćindex_template.php
doindex.php
i zweryfikować go z ustawieniami komputera szczególnych.źródło