Игнорирайте файлове, които вече са прехвърлени в хранилището на Git.
За проследяване на един файл, който вече е добавен / инициализиран в хранилището ви, т.е. За да спрете проследяването на файл, но не и да го премахнете от вашата система, използвайте: 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.
В противен случай ще загубите всички промени в други файлове.
Ако се опитате да игнорирате промени в файл, който вече е проследен в хранилището (например файла dev.properties, който трябва да промените за локалната си среда, но никога не искате да проверявате за тези промени), от това, което искате да направите, е:
git update-index --assume-unchanged <file>
Ако искате да започнете да проследявате промените отново
git update-index --no-assume-unchanged <file>
Вижте ръководството на git -update-index (1) .

Също така проверете no-skip-worktree
за no-skip-worktree
и no-skip-worktree
за индекса за актуализация, ако имате нужда от него, за да запазите миналото git-reset ( чрез )
Актуализация: Както хората питаха, тук е удобен (и актуализиран след коментиране по-долу) псевдоним, за да видите кои файлове в момента са "игнорирани" (- без промени) в местната работна област
$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"
За да проследите файл, който вече е добавен / инициализиран в хранилището ви, т.е. да спрете проследяването на файла, но не го изтрийте от системата си: git rm --cached filename
Да - системата .gitignore
игнорира файлове, които понастоящем не са под контрола на версиите от git.
т.е. Ако вече сте добавили файл с име test.txt
с git-add
, добавянето на test.txt
към .gitignore
ще доведе до проследяване на промените в test.txt
.
Първо трябва да git rm test.txt
и да извърши тази промяна. Само тогава промените в test.txt
бъдат игнорирани.
Премахване на бяло пространство в .gitignore
Също така се уверете, че вашият .gitignore няма пробели след края. Попаднах на този въпрос, защото търсех отговор, а за мен беше смешно да отворя редактора, вместо просто да кося .gitignore. Премахнато е допълнително пространство от края и poof работи сега :)
завърших следните стъпки
git rm -r --cached . git add . git reset HEAD
след това изтрийте всички файлове (* .swp в моя случай), които трябва да бъдат игнорирани.
Ако искате да спрете файла за проследяване, без да изтривате файла от локалната система, която предпочитам да игнорирам 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
Благодаря
За да изтриете само няколко конкретни файла:
git update-index --assume-unchanged path/to/file
Ако искате отново да го проследите:
git update-index --no-assume-unchanged path/to/file
Както се съобщава от dav_i, за да запишете файла в репо и да го премахнете от промените, без да създавате допълнителен ангажимент, можете да използвате:
git update-index --assume-unchanged filename
Подробни отговори навсякъде!
Просто използвайте следното.
git rm -r --cached .
Той ще премахне файловете, които се опитвате да игнорирате от източника, а не от съветника на вашия компютър!
След това просто заключете и кликнете!
Без да знам какво направи заповедта за отговор, аз се сблъсках с разочарование. Той рекурсивно изтрива всеки файл от хранилището на git.
Запазване за архивиране ... Как да се върне "git rm -r." ?
git reset HEAD
Това е трик, тъй като имах отключени локални файлове, които не исках да презаписвам.
Има и друго предложение, може би за бавни момчета като мен =) Поставете файла .gitignore в корена на хранилището не в .git >. Ура!
Никой от отговорите не работеше за мен.
Вместо
- Извличане на файл от директорията, контролирана от git
- Проверете отстраняването на git
- Преместете файла обратно в контролирания git-директория
След преместване на файла, git ще го игнорира.
Работи с директории!
Друг проблем, с който се сблъсках, беше, че публикувах коментар.
tmp/* # ignore my tmp folder (this doesn't work)
работи
# ignore my tmp folder tmp/
Ако файловете вече са в контрола на версиите, трябва да ги изтриете ръчно.
Благодарение на отговора ми, успях да напиша този малък линеен ред, за да го подобря. Проведох го на моя .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
. Това е лесно за файлове, които не са били модифицирани.
Намерих странен проблем с .gitignore. Всичко беше на място и изглеждаше правилно. Единствената причина, поради която моят .gitignore е "игнориран", е, че краят на линията е в Mac-Format (r). Ето защо, след като запазите файла с правилния край на реда (в vi използвайки: set ff = unix), всичко работи като чар!
Друг проблем, който не се споменава тук, е, че сте създали вашия .gitignore в Windows Notebook, който научих, че може да изглежда като безсмислица на други платформи. Ключът е да се уверите, че кодирането е настроено на ANSI в Notepad (или да създадете файл в linux, точно като мен).
От отговора ми тук: medican.info.site/questions/2007 / ...
На сървъра на моя Linux сървър (не е вярно в локалния ми dev master), директории се игнорират, докато не добавя звездичка:
WWW / архив / *
Не знам защо, но ме накара да загубя няколко часа, така че исках да споделя ...
Трябва да се има предвид, че ако .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."
, което, разбира се, нямате.
Ако трябва да спрете проследяването на много игнорирани файлове, можете да комбинирате някои команди:
git ls-files -i --exclude-standard | xargs -L1 git rm --cached
Това ще спре проследяването на игнорираните файлове. Ако искате да изтриете файлове от файловата система, не използвайте опцията --cached
. Можете също да зададете папка, която да ограничи търсенето, например:
git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm