Будет ли git-rm --cached удалять файлы рабочего дерева другого пользователя, когда они извлекают

Я хочу прекратить отслеживать файлы, но по-прежнему хранить их в своем рабочем дереве.

Я понял, что git rm --cached FILE позволит мне это сделать. Однако, если кто-то другой потребует это изменение, будут ли удалены его локальные копии?


person rod    schedule 23.07.2010    source источник
comment
Надеюсь, в сочетании с добавлением их в ваш .gitignore!   -  person Cascabel    schedule 23.07.2010
comment
да. Это заставляет меня задуматься, что произойдет, если вы добавите их в gitignore и не git rm их ...   -  person rod    schedule 23.07.2010
comment
это наверняка обсуждалось в других вопросах; что происходит ... ничего.   -  person P Shved    schedule 23.07.2010


Ответы (2)


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

Однако, если удаленные пользователи внесли локальные изменения в эти файлы, они не будут удалены, поскольку pull приведет к конфликту слияния.

Как предлагает Джефроми в своем комментарии, хотя файлы удаляются на стороне других пользователей, их можно легко восстановить - они находятся под контролем версий, не так ли? ;-) Файлы могут быть получены git checkout <revision> -- <files...>. В качестве ревизии вы можете указать идентификатор предыдущей фиксации, для извлечения он сохраняется в ORIG_HEAD (см. этот вопрос для подробностей):

git checkout ORIG_HEAD -- removed_file
person P Shved    schedule 23.07.2010
comment
И если извлечение не конфликтует, но они хотят вернуть файлы, все, что им нужно сделать, это git checkout HEAD^ <path>. - person Cascabel; 23.07.2010
comment
Спасибо, вот что мне нужно было знать. Скрестив пальцы, я не удалил ни одного жизненно важного файла xcode в рабочих каталогах моих коллег. - person rod; 23.07.2010

В таком случае я бы предпочел игнорировать их только локально:

Если они уже отслеживаются:

git update-index --skip-worktree FILE

Если они не отслеживаются: добавьте их в свой локальный файл исключения.

echo "FILE" >> .git/info/exclude

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

person code7amza    schedule 19.04.2014