2011-11-30 8 views
6

Chciałbym dołączyć do mojego repozytorium plik źródłowy (dostarczony, gdy ktoś sklonuje repozytorium), ale domyślnie zmiany są ignorowane.git Uwzględnij plik, ale jego zmiany zostały usunięte.

git update-index --assume-unchanged ... nie działa, ponieważ dotyczy tylko lokalnego indeksu. Chcę, aby wszyscy użytkownicy domyślnie ignorowali dany plik.

.gitignore nie działa, ponieważ jeśli śledzę plik za pomocą git add -f .., to zmiany w nim są śledzone.

Próbuję osiągnąć to, co się stanie, jeśli svn add ed pliku następnie svn:ignore ed go.

EDIT:

Wygląda to po prostu nie jest możliwe w Git i zmieniłem organizację pliku źródłowego i budować, że oparła się na tym starym zachowania Subversion.

Przykłady:

$ git clone [email protected]:gsmith/sandbox.git 
snip... 
$ cd sandbox/ 
$ ls -a 
. .. .git .gitignore gitignored tracked 
$ cat .gitignore 
gitignored 

$ echo foo >> gitignored 
$ git status 
# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: gitignored 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

chciałbym tego pliku będą ignorowane.

$ git reset --hard HEAD 
HEAD is now at 34b1f3d initial setup 
$ git rm gitignored 
rm 'gitignored' 
$ git commit -m "test" 
[master cd8199d] test 
1 files changed, 0 insertions(+), 1 deletions(-) 
delete mode 100644 gitignored 
$ git status 
# On branch master 
# Your branch is ahead of 'origin/master' by 1 commit. 
# 
nothing to commit (working directory clean) 
$ ls -a 
. .. .git .gitignore tracked 

$ echo foo >> gitignored 
$ git status 
# On branch master 
# Your branch is ahead of 'origin/master' by 1 commit. 
# 
nothing to commit (working directory clean) 

Teraz jest zignorowany. Jednak osoba, która klonuje repozytorium, nie otrzyma zawartości gitignored.

+0

Nie ma właściwości ".svnignore", tylko svn: ignore – manojlds

+0

@manojlds, dzięki, poprawiłem pytanie. –

Odpowiedz

0
  1. Dodaj plik do repo specyficzne .gitignore.
  2. Jeśli jest już śledzony (może być Twój przypadek), po prostu wykonaj git rm --cached myfile.

Mam nadzieję, że to jest to, czego chcesz. Jeśli nie, możesz rzucić okiem na this.

0

Aby zmienić nazwę tytułu: chcesz śledzić plik, ale zmiany w nim są nieśledzone. To tyle sprzeczności, ile to brzmi. Prawdopodobnie masz plik, który zmienia się w sposób lokalny, który nie ma znaczenia dla innych użytkowników repozytorium, ale zawiera także treści, których każdy potrzebuje. Odpowiedź oczywiście nie polega na tym. Dostępne są dwie podstawowe opcje:

  • Podziel plik. Jedna część to "lokalna", która nie musi być śledzona, a druga część to rdzeń/dzielona, ​​zawierająca rzeczy, których wszyscy potrzebują i zwykle nie będzie modyfikować. Powinieneś automatycznie utworzyć pusty/szablonowy plik lokalny, odpowiednio w build/deploy/runtime.

  • Wdróż plik jako szablon, a następnie zrób kopię. Zrobiłbyś kopię automatycznie, w zależności od kompilacji/wdrożenia/środowiska wykonawczego.

Tak czy inaczej, nie chodzi o to „jak mogę powiedzieć Git nie zapisuje ten plik Powiedziałem go śledzić?” ale "dlaczego próbuję zarówno śledzić, jak i nie śledzić tych samych treści?"

+2

Problem polega na tym, że "śledzenie" w git oznacza dwie rzeczy.1) zachowaj kopię tego pliku w repozytorium 2) obserwuj zmiany tego pliku po zatwierdzeniu repozytorium. Pytanie dotyczy zachowania 1) podczas usuwania 2). To nie jest sprzeczność, to po prostu nie wyróżnia się git. –

+0

@WaylonFlinn To sprzeczność w kontekście Git, o to właśnie chodzi. Trzymanie kopii bez obserwowania zmian prowadzi do wielu komplikacji, a Git unika wprowadzania tego, ponieważ jest możliwe (i często w rzeczywistości znacznie lepsze) zrobienie czegoś takiego jak dwie opcje, które zasugerowałem. – Cascabel

Powiązane problemy