Удаление файлов .xcuserstate и DS_Store из git

В Xcode я заметил, что .DS_Store и *.xcuserstate всегда меняются и не нуждаются в совершении. Итак, я написал файл .gitignore, который содержит это:

.DS_Store
*.xcuserstate

среди других записей. Затем я использовал:

git rm --cached *xcuserstate
git rm ---cached .DS_Store

Чтобы удалить эти типы файлов уже под управлением версии. Однако, когда я иду на слияние, Xcode сообщает мне, что есть изменения, которые необходимо выполнить. Эти изменения включают файлы .DS_Store и файлы .xcuserstate.

Итак, я пробовал это: Как удалить файлы .DS_Store из репозитория Git?

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
find . -name *.xcuserstate -print0 | xargs -0 git rm --ignore-unmatch

и я получил тот же результат. Как я могу удалить эти файлы из исходного элемента управления?

Ответы

Ответ 1

Вам необходимо зафиксировать свое изменение после удаления из промежуточной области.

Как вы уже это сделали, запустите:

$ git rm --cached path/to/.DS_Store
$ git rm --cached *.xcuserstate

Обратите внимание: у вас могут быть некоторые в других каталогах, поэтому вам может понадобиться несколько вызовов, чтобы получить их все. На этом этапе ваши удаления помещаются в индекс, но еще нужно сделать: добавьте ваш .gitignore и завершите окончательный результат:

$ git add .gitignore
$ git commit -m "Remove and ignore .xcuserstate and .DS_Store files."

Теперь они будут удалены из репозитория и будут игнорироваться в будущем. Примечание. Это приведет к удалению файлов для других людей, даже если вы использовали git rm --cached локально. К сожалению, вы не можете сделать этого. Кроме того, файлы все еще находятся в вашей истории, поэтому в зависимости от того, что вы делаете, вы можете видеть их в других ветвях, пока все не будет объединено, а все ваши ветки основаны на том, что имеет новый фиксатор.

Ответ 2

Попробуйте git update-index --assume-unchanged *.xcuserstate .DS_Store и посмотрите, помогает ли он