Ответ 1
используйте git rm --cached
для файлов и git rm -r --cached
для каталога build/
Я начал использовать git с проектом xcode и недавно обнаружил, что могу использовать файлы .gitignore и .gitattributes, чтобы игнорировать шум компилятора и системы. Теперь, когда у меня есть файлы .gitignore и .gitattributes, как я могу "применить" новые правила игнорирования и избавиться от crud от контроля версий?
Мой .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_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 файлы, чтобы он думал, что нет отслеживаемых файлов. Код оболочки выше запрашивает все файлы, которые будут игнорироваться, если индекс был пустым, а затем удаляет их из фактического индекса с помощью git rm.
После того, как файлы были "не проверены", используйте git status, чтобы убедиться, что ничего важного не было удалено (если вы так настраиваете свои шаблоны исключений и используете git reset -- path
для восстановления удаленной записи индекса). Затем создайте новый коммит, который не будет содержать "crud" .
"crud" все равно будет в любых старых фиксациях. Вы можете использовать git filter-branch для создания чистых версий старых коммитов, если вам действительно нужна чистая история (nb с использованием фильтра git -branch будет "переписывать историю", поэтому ее не следует воспринимать легко, если у вас есть какие-то сотрудники, которые вытащили любые ваши исторические фиксации после того, как "crud" был впервые представлен).
Если вы уже отслеживаете файлы, которые хотите игнорировать, их нужно удалить с помощью
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 ignored before'
это немного ручной рабочий процесс, но как я это делал в прошлом.
Если вы хотите полностью удалить файлы, то удобная ссылка из Github.
Будьте предупреждены, что:
Вам не нужно "применять" изменения. просто поместите файл .gitignore в свой домашний каталог (если вы хотите, чтобы он был глобальным) или в корне вашего проекта (если вы хотите, чтобы он был уникальным только для этого проекта).
Изменить: Мне кажется, что у вас может быть эта проблема, потому что вы добавили файлы, которые вы не хотите отслеживать уже. Вот о чем говорит эта страница gitignore:
Обратите внимание, что все файлы gitignore действительно относятся только к файлам, которые еще не отслеживаются git; чтобы игнорировать незафиксированные изменения в уже отслеживаемых файлах, обратитесь к git update-index -assume-unchanged documentation.