Игнорирайте файлове, които вече са прехвърлени в хранилището на Git.

Имам вече инициализиран Git хранилище, в който добавих .gitignore файл. Как да актуализираме индекса на файла, така че файловете, които искам да игнорирам, да бъдат игнорирани?

2224
16 июля '09 в 22:26 2009-07-16 22:26 trobrock е настроен на 16 юли в 10:26 ч. 2009-07-16 22:26
ответ 21 отговора

За проследяване на един файл, който вече е добавен / инициализиран в хранилището ви, т.е. За да спрете проследяването на файл, но не и да го премахнете от вашата система, използвайте: git rm --cached filename

За да анализирате всички файлове, които вече са във вашия .gitignore :

Първо направете всички промени в чакащия код и след това изпълнете тази команда:

 git rm -r --cached . 

Това премахва всички модифицирани файлове от индекса (междинна зона) и след това стартира:

 git add . 

Поправете го:

 git commit -m ".gitignore is now working" 

За да отмените git rm --cached filename , използвайте git add filename .

Не забравяйте да извършите всички важни промени, преди да стартирате git add. В противен случай ще загубите всички промени в други файлове.

3691
16 июля '09 в 22:32 2009-07-16 22:32 Отговорът е даден от trobrock 16 юли '09 в 10:32 2009-07-16 22:32

Ако се опитате да игнорирате промени в файл, който вече е проследен в хранилището (например файла dev.properties, който трябва да промените за локалната си среда, но никога не искате да проверявате за тези промени), от това, което искате да направите, е:

 git update-index --assume-unchanged <file> 

Ако искате да започнете да проследявате промените отново

 git update-index --no-assume-unchanged <file> 

Вижте ръководството на git -update-index (1) .

border=0

Също така проверете no-skip-worktree за no-skip-worktree и no-skip-worktree за индекса за актуализация, ако имате нужда от него, за да запазите миналото git-reset ( чрез )


Актуализация: Както хората питаха, тук е удобен (и актуализиран след коментиране по-долу) псевдоним, за да видите кои файлове в момента са "игнорирани" (- без промени) в местната работна област

 $ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]" 
527
06 июля '12 в 20:09 2012-07-06 20:09 отговорът е даден dyodji Юли 06 '12 в 20:09 2012-07-06 20:09

За да проследите файл, който вече е добавен / инициализиран в хранилището ви, т.е. да спрете проследяването на файла, но не го изтрийте от системата си: git rm --cached filename

351
15 сент. Отговорът е даден от pagetribe Sep 15 2010-09-15 02:55 '10 в 2:55 2010-09-15 02:55

Да - системата .gitignore игнорира файлове, които понастоящем не са под контрола на версиите от git.

т.е. Ако вече сте добавили файл с име test.txt с git-add , добавянето на test.txt към .gitignore ще доведе до проследяване на промените в test.txt .

Първо трябва да git rm test.txt и да извърши тази промяна. Само тогава промените в test.txt бъдат игнорирани.

78
18 июля '09 в 11:15 2009-07-18 11:15 Отговорът е даден от Antony Stubbs 18 юли, '09 в 11:15 ч. 2009-07-18 11:15

Премахване на бяло пространство в .gitignore

Също така се уверете, че вашият .gitignore няма пробели след края. Попаднах на този въпрос, защото търсех отговор, а за мен беше смешно да отворя редактора, вместо просто да кося .gitignore. Премахнато е допълнително пространство от края и poof работи сега :)

50
02 февр. Отговорът е даден от MikeJansen 02 Feb. 2012-02-02 18:59 '12 в 18:59 2012-02-02 18:59

завърших следните стъпки

 git rm -r --cached . git add . git reset HEAD 

след това изтрийте всички файлове (* .swp в моя случай), които трябва да бъдат игнорирани.

40
15 июля '11 в 10:22 2011-07-15 10:22 отговорът е даден от Орландо 15 юли, '11 в 10:22 2011-07-15 10:22

Ако искате да спрете файла за проследяване, без да изтривате файла от локалната система, която предпочитам да игнорирам config/database.yml . Опитайте:

 git rm --cached config/database.yml # this will delete your file from git history but not from your local system. 

Добавете този файл към файла .gitignore и .gitignore промените. Отсега нататък всички промени, направени в config / database.yml няма да бъдат проследявани чрез git.

 $ echo config/database.yml >> .gitignore 

Благодаря

37
02 марта '14 в 12:00 2014-03-02 12:00 отговорът е даден przbadu 02 март '14 в 12:00 2014-03-02 12:00

За да изтриете само няколко конкретни файла:

 git update-index --assume-unchanged path/to/file 

Ако искате отново да го проследите:

 git update-index --no-assume-unchanged path/to/file 
28
21 авг. отговор, даден от Марк Салваторе 21 август. 2013-08-21 17:20 '13 в 17:20 2013-08-21 17:20

Както се съобщава от dav_i, за да запишете файла в репо и да го премахнете от промените, без да създавате допълнителен ангажимент, можете да използвате:

 git update-index --assume-unchanged filename 
26
17 апр. Отговор от Iman Mohamadi на 17 април 2015-04-17 10:21 '15 в 10:21 часа 2015-04-17 10:21

Подробни отговори навсякъде!

Просто използвайте следното.

 git rm -r --cached . 

Той ще премахне файловете, които се опитвате да игнорирате от източника, а не от съветника на вашия компютър!

След това просто заключете и кликнете!

25
19 июля '17 в 8:38 2017-07-19 08:38 отговорът е даден от Ахмад Аваис на 19 юли в 8:38 часа 2017-07-19 08:38

Без да знам какво направи заповедта за отговор, аз се сблъсках с разочарование. Той рекурсивно изтрива всеки файл от хранилището на git.

Запазване за архивиране ... Как да се върне "git rm -r." ?

 git reset HEAD 

Това е трик, тъй като имах отключени локални файлове, които не исках да презаписвам.

24
12 апр. Отговорът е averydev на 12 април 2011-04-12 23:39 '11 в 23:39 ч. 2011-04-12 23:39

Има и друго предложение, може би за бавни момчета като мен =) Поставете файла .gitignore в корена на хранилището не в .git >. Ура!

23
19 июня '13 в 0:08 2013-06-19 00:08 отговорът е даден Олга 19 юни '13 в 0:08 2013-06-19 00:08

Никой от отговорите не работеше за мен.

Вместо

  • Извличане на файл от директорията, контролирана от git
  • Проверете отстраняването на git
  • Преместете файла обратно в контролирания git-директория

След преместване на файла, git ще го игнорира.

Работи с директории!

22
15 нояб. Отговорът е даден от Hunter S 15 ноември. 2015-11-15 07:03 '15 в 7:03 2015-11-15 07:03

Друг проблем, с който се сблъсках, беше, че публикувах коментар.

 tmp/* # ignore my tmp folder (this doesn't work) 

работи

 # ignore my tmp folder tmp/ 
20
06 дек. Отговорът е даден 06 декември. 2011-12-06 16:14 '11 в 16:14 2011-12-06 16:14

Ако файловете вече са в контрола на версиите, трябва да ги изтриете ръчно.

18
16 июля '09 в 22:28 2009-07-16 22:28 Отговорът е даден от Арагорн на 16 юли 2009 г. в 10:28 2009-07-16 22:28

Благодарение на отговора ми, успях да напиша този малък линеен ред, за да го подобря. Проведох го на моя .gitignore и repo и нямах проблеми, но ако някой види някакви явни проблеми, коментар. Това трябва да git rm -r --cached от git rm -r --cached :

cat $ (git rev-parse - шоу-топло) / .gitIgnore | sed "s // $ //" | grep -v "^ #" | xargs -L 1 -I {} намери $ (git rev-parse - шоу-топлев) -име "{}" | xargs -l 1 git rm -r - кеш

Имайте предвид, че ще получите много fatal: pathspec '<pathspec>' did not match any files . Това е лесно за файлове, които не са били модифицирани.

13
03 июля '12 в 20:25 2012-07-03 20:25 отговорът е даден umop 03 юли '12 в 20:25 2012-07-03 20:25

Намерих странен проблем с .gitignore. Всичко беше на място и изглеждаше правилно. Единствената причина, поради която моят .gitignore е "игнориран", е, че краят на линията е в Mac-Format (r). Ето защо, след като запазите файла с правилния край на реда (в vi използвайки: set ff = unix), всичко работи като чар!

10
02 марта '12 в 12:56 2012-03-02 12:56 Отговор е зададен от Johannes Vetter на 02 март 2012 г. в 12:56 ч. 2012-03-02 12:56

Друг проблем, който не се споменава тук, е, че сте създали вашия .gitignore в Windows Notebook, който научих, че може да изглежда като безсмислица на други платформи. Ключът е да се уверите, че кодирането е настроено на ANSI в Notepad (или да създадете файл в linux, точно като мен).

От отговора ми тук: medican.info.site/questions/2007 / ...

9
21 мая '13 в 12:43 2013-05-21 12:43 отговорът е даден от Мат Паркинс 21 май'13 в 12:43 2013-05-21 12:43

На сървъра на моя Linux сървър (не е вярно в локалния ми dev master), директории се игнорират, докато не добавя звездичка:

WWW / архив / *

Не знам защо, но ме накара да загубя няколко часа, така че исках да споделя ...

8
09 марта '13 в 9:36 2013-03-09 09:36 отговорът е даден ndemoreau март 09 '13 в 9:36 2013-03-09 09:36

Трябва да се има предвид, че ако .gitignore не игнорира файлове без следа, то е, че не трябва да имате коментари в същия ред като игнориране. Това е добре

 # ignore all foo.txt, foo.markdown, foo.dat, etc. foo* 

Но няма да работи:

 foo* # ignore all foo.txt, foo.markdown, foo.dat, etc. 

.gitignore интерпретира последния случай като "игнорира файлове с име "foo* # ignore all foo.txt, foo.markdown, foo.dat, etc." , което, разбира се, нямате.

6
20 февр. Отговорът е даден от Габриел Perdue на 20 февруари. 2016-02-20 01:52 '16 в 1:52 2016-02-20 01:52

Ако трябва да спрете проследяването на много игнорирани файлове, можете да комбинирате някои команди:

git ls-files -i --exclude-standard | xargs -L1 git rm --cached

Това ще спре проследяването на игнорираните файлове. Ако искате да изтриете файлове от файловата система, не използвайте опцията --cached . Можете също да зададете папка, която да ограничи търсенето, например:

git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm

4
20 апр. Отговорът е даден от Etherealone 20 април. 2017-04-20 09:18 '17 в 9:18 2017-04-20 09:18

Други въпроси относно таговете или Ask a Question