Подтвердить что ты не робот

Применить правила git .gitignore к существующему репозиторию

Я начал использовать 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

Спасибо!

4b9b3361

Ответ 1

используйте git rm --cached для файлов и git rm -r --cached для каталога build/

Ответ 2

Вот один из способов "отследить" любые файлы, которые в противном случае были бы проигнорированы в текущем наборе шаблонов исключений:

(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" был впервые представлен).

Ответ 3

Если вы уже отслеживаете файлы, которые хотите игнорировать, их нужно удалить с помощью

git rm --cached <file>

Git не будет игнорировать файлы, которые уже отслеживаются (т.е. вы добавили их с помощью git add).

Ответ 4

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'

это немного ручной рабочий процесс, но как я это делал в прошлом.

Ответ 5

Если вы хотите полностью удалить файлы, то удобная ссылка из Github.

Будьте предупреждены, что:

  • Это перепишет вашу историю, поэтому, вероятно, стоит сделать это прежде, чем вы опубликуете свое репо.
  • Помните, что старые shas все равно будут находиться в базе данных объектов, но руководство, к которому я привязался, покажет вам, как справляться с ними.

Ответ 6

Вам не нужно "применять" изменения. просто поместите файл .gitignore в свой домашний каталог (если вы хотите, чтобы он был глобальным) или в корне вашего проекта (если вы хотите, чтобы он был уникальным только для этого проекта).

Изменить: Мне кажется, что у вас может быть эта проблема, потому что вы добавили файлы, которые вы не хотите отслеживать уже. Вот о чем говорит эта страница gitignore:

Обратите внимание, что все файлы gitignore действительно относятся только к файлам, которые еще не отслеживаются git; чтобы игнорировать незафиксированные изменения в уже отслеживаемых файлах, обратитесь к git update-index -assume-unchanged documentation.