Этот вопрос уже имеет ответ здесь:
Я начал использовать мерзавца с проектом XCode и недавно обнаружил, что могу использовать .gitignore и .gitattributes файлы для игнорирования шума из компилятора и системы. Теперь, когда у меня есть .gitignore и .gitattributes файлы на месте, как я могу "подать заявку", новые игнорируют правила и избавляются от грязи от управления версиями?
Мой .gitignore файл:
# xcode noise
*.modelv3
*.pbxuser
*.perspective
*.perspectivev3
*.pyc
*~.nib/
build/*
# Textmate - if you build your xcode projects with it
*.tm_build_errors
# old skool
.svn
# osx noise
.DS_Store
profile
И мой .gitattributes файл:
*.pbxproj -crlf -diff -merge
Спасибо!
используйте git rm --cached
для файлов и git rm -r --cached
для каталога build/
Если вы уже отслеживаете файлы, которые хотите игнорировать, вы должны удалить их с помощью
git rm --cached <file>
Git не будет игнорировать файлы, которые уже отслеживаются (т.е. вы добавили их с помощью git add).
mv the_file_i_want_to_ignore the_file_i_want_to_ignore.back
git rm the_file_i_want_to_ignore
mv the_file_i_want_to_ignore. back the_file_i_want_to_ignore
git status
git commit -m 'ignore a bunch of stuff i should have ignore before'
это немного ручной процесс, но так я делал это в прошлом.
Вот один из способов «отследить» любые файлы, которые в противном случае игнорировались бы при текущем наборе шаблонов исключения:
(GIT_INDEX_FILE=some-non-existent-file \
git ls-files --exclude-standard --others --directory --ignored -z) |
xargs -0 git rm --cached -r --ignore-unmatch --
Это оставляет файлы в вашем рабочем каталоге, но удаляет их из индекса.
Уловка, используемая здесь, состоит в том, чтобы предоставить несуществующий индексный файл для git ls-files , чтобы он считал, что отслеживаемых файлов нет. Приведенный выше код оболочки запрашивает все файлы, которые были бы проигнорированы, если бы индекс был пуст, а затем удаляет их из фактического индекса с помощью git rm .
После «неотслеживания» файлов используйте git status , чтобы убедиться, что ничего важного не было удалено (в этом случае измените шаблоны исключения и используйте git reset - path
для восстановления удаленная запись указателя). Затем сделайте новую фиксацию, которая не учитывает «грязь».
«Грязь» по-прежнему будет в любых старых коммитах. Вы можете использовать git filter-branch для создания чистых версий старых коммитов, если вам действительно нужна чистая история (например, использование git filter-branch «перезапишет историю», поэтому следует не следует относиться к ним легкомысленно, если у вас есть соавторы, которые вытащили какие-либо из ваших исторических коммитов после того, как «грубый» был впервые введен).
Если вы хотите полностью удалить файлы, то вот удобная ссылка на Github .
Имейте в виду, что:
Вам не нужно "применять" изменения. Просто поместите файл .gitignore в ваш домашний каталог (если вы хотите, чтобы он был глобальным) или в корень проекта (если вы хотите, чтобы он был уникальным только для этого проекта).
Edit: Мне пришло в голову, что у вас может возникнуть эта проблема, потому что вы уже добавили файлы, которые не хотите отслеживать. Вот что по этому поводу говорит man-страница gitignore:
Обратите внимание, что все файлы gitignore действительно касаются только файлов, которые ещё не отслеживаются git; чтобы игнорировать незафиксированные изменения в уже отслеживаемых файлах, пожалуйста, обратитесь к документации git update-index --assume-unchanged.