Примените мерзавца .gitignore правила в существующий репозиторий [дубликат]

Этот вопрос уже имеет ответ здесь:

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

Спасибо!

47
задан bzeaman 13 July 2016 в 13:26
поделиться

6 ответов

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

37
ответ дан 26 November 2019 в 19:26
поделиться

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

git rm --cached <file>

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

10
ответ дан 26 November 2019 в 19:26
поделиться

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'

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

1
ответ дан 26 November 2019 в 19:26
поделиться

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

(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 «перезапишет историю», поэтому следует не следует относиться к ним легкомысленно, если у вас есть соавторы, которые вытащили какие-либо из ваших исторических коммитов после того, как «грубый» был впервые введен).

64
ответ дан 26 November 2019 в 19:26
поделиться

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

Имейте в виду, что:

  1. Это перезапишет вашу историю, так что это, вероятно, стоит сделать только перед публикацией вашего репо.
  2. Помните, что старые shas все еще будут в базе данных объектов, но руководство, на которое я ссылаюсь, покажет вам, как с ними бороться.
2
ответ дан 26 November 2019 в 19:26
поделиться

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

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

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

-1
ответ дан 26 November 2019 в 19:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: