Почему git rm --cached не удаляет локальный когда-либо отслеживаемый файл, а другие - PullRequest
2 голосов
/ 13 апреля 2019

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

Вы можете воспроизвести его с помощью:

  1. сохранить текущую работу.( Машина A )
git add .
git stash save "work position"
создайте новый файл и зафиксируйте его. ( Машина A )
echo hello>>file_not_to_track
git add .
git commit -m "add file file_not_to_track"
извлечение с другого компьютера (или другого каталога) ( Машина B )
git pull

Показать файлы сейчас

ls
file_not_to_track  README.md
распаковать файл. ( Машина A )
echo file_not_to_track >> .gitignore
git rm -r --cached .
git add .
git commit -m "untrack file_not_to_track"
git push

показать файлы сейчас

ls
file_not_to_track  README.md
код извлечения ( Machine B )
git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From example.com:my/example_project
   6525df1..f413f8b  master     -> origin/master
Updating 6525df1..f413f8b
Fast-forward
 .gitignore        | 1 +
 file_not_to_track | 1 -
 2 files changed, 1 insertion(+), 1 deletion(-)
 create mode 100644 .gitignore
 delete mode 100644 file_not_to_track

показать файлы сейчас

ls
README.md

Как показано git rm -r --cached . удалить когда-либо отслеживаемый файл надругие репо, но не в текущем репо.

Ответы [ 3 ]

3 голосов
/ 16 апреля 2019

На компьютере A:

git rm -r --cached .

Приведенная выше команда удалит файлы из индекса ( и README.md, и file_not_to_track ).В это время индекс пуст .Однако file_not_to_track все еще существует в файловой системе.

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

git add .

С действием add , git только что добавил только README файл.(file_not_to_track был проигнорирован).

На машине B:

2 файла изменены, 1 вставка (+), 1 удаление (-)

С помощью действия pull git распознает, что file_not_to_track исчезло.Git выполняет детальное действие.

3 голосов
/ 16 апреля 2019

Так работает опция - кэшированная , которая удаляет файл из индекса git.Файлы рабочего дерева останутся одни.Однако Git больше не будет отслеживать этот файл в вашем локальном хранилище.

Найдите здесь параметр --cached:

https://git -scm.com / docs / git-гт

3 голосов
/ 13 апреля 2019

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

...