Как я могу удалить «исключенные» файлы из репозитория Git? - PullRequest
3 голосов
/ 28 октября 2011

Что я делаю:

Я работаю в Xcode и начал использовать Git не так давно.

Как обычно, есть некоторые файлы, которые я не хочу включать в базу данных Git, которые связаны с настройками XCode.Я уже некоторое время использую Git-репозиторий, но теперь хочу удалить эти файлы «редактора», поскольку они создают проблемы.


Как я это делаю:

Правильный способ сделать это, по-видимому, , а не для использования .gitignore.Скорее, это использовать .git / info / exclude.Создав новый проект в Xcode и выбрав опцию «use Git», я смог выяснить, что для этого по умолчанию должен использоваться файл .git / info / exclude:

.DS_Store

UserInterface.xcuserstate

Итак, я скопировал этот исключаемый файл в то же место git для проекта, над которым я работаю, и, похоже, все в порядке.Кроме ...


Что идет не так:

Файлы, конечно, не будут удалены / не отслежены из моего текущего проекта без ручного вмешательства.Итак, я попробовал следующее, которое не работает и говорит мне, что нет таких файлов:

git rm --cached .DS_Store
git rm --cached UserInterface.xcuserstate

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


Вопрос:

Итак, что на самом деле делает файл «исключить»?Есть ли способ сделать так, чтобы исключить файл распаковывать или легко применять ко всем веткам репо?

Если нет, как я могу привести свой проект в то же состояние, в котором он был бы, если бы я создал репозиторий git из Xcodeна первом месте?

1 Ответ

2 голосов
/ 28 октября 2011

Одна из причин, по которой первая указанная вами команда git rm --cached не удалась, заключается в том, что .DS_Store является каталогом.Попробуйте:

git rm -r --cached .DS_Store

... вместо этого.Вы также можете проверить с помощью git ls-files, что на самом деле в этом каталоге отслеживаются файлы, которые отслеживаются в хранилище.Если бы не было, это также объяснило бы вам ошибку.Убедитесь, что вы правильно понимаете регистр этих файлов.

(Это, как правило, полезно исключить правила, которые я бы добавил к .gitignore, между прочим.)

Чтобы ответить на ваш другойвопрос:

Итак, что же на самом деле делает файл «исключить»?Есть ли способ сделать так, чтобы исключить файл распаковывать или легко применять ко всем веткам репо?

Если файлы уже отслеживаются в репозитории, вам все равно придется вручную удалить их, независимо от того,они игнорируются / исключаются.По сути, различные места, в которые можно добавить правила исключения, имеют с одинаковым синтаксисом и семантикой .Приоритет этих правил также описан в этой документации, но по существу:

  • Исключить правила, предоставленные в командной строке, имеют наивысший приоритет.
  • Затем .gitignore файлы, начиная стекущий каталог и переход на верхний уровень.
  • Затем используется .git/info/exclude.
  • Наконец, правила с самым низким приоритетом могут находиться в файле, заданном параметром конфигурации core.excludesfile.
...