以下情况:
我们在 GIT 中有一些本地配置文件,应该将其删除。
如果我们只是做 agit rm
并将其添加到 中.gitignore
,则该文件将在每个开发人员的计算机上被删除。
但我们想避免这种情况——该文件不应再是 git 存储库,但也不应在拉取/合并时删除。
这可能吗?如何?
以下情况:
我们在 GIT 中有一些本地配置文件,应该将其删除。
如果我们只是做 agit rm
并将其添加到 中.gitignore
,则该文件将在每个开发人员的计算机上被删除。
但我们想避免这种情况——该文件不应再是 git 存储库,但也不应在拉取/合并时删除。
这可能吗?如何?
没有办法精确地做你正在寻找的东西。但以下内容可能对您有用。
在对现已删除的答案的评论中,您表示您的目标是用该文件的模板替换要删除的文件。如果该模板文件是由删除旧文件的同一提交创建的,并且文件足够相似,那么 git 会将其检测为重命名(这实际上就是git mv
这样做的)。
当其他开发人员随后尝试将该更改合并到他们的存储库中时,他们的副本将被重命名而不是被删除。如果很可能他们对文件进行了本地更改,这将阻止该提交被合并。那时,他们可以简单地将他们的文件版本复制到一个临时名称,并用于git checkout HEAD <thefile>
放弃他们对原始文件的更改。这将允许合并继续进行,包括重命名。之后,他们可以将临时副本移回原始名称。
这确实需要在该存储库的每个非裸副本中进行一些工作,但在任何情况下都不应该导致工作被删除。
git rm --cached
保留本地文件,但从 repo 中删除它们。
1)假设您在 master 分支中工作:
git rm dont-track-me.txt
git commit
git push origin master
2)现在在开发者的盒子上:
git pull # yep, this will delete the file
git checkout HEAD^ dont-track-me.txt
git reset # prevents restaging the file in the index
'dont-track-me.txt' 现在作为未跟踪文件出现在开发人员的工作树中。这确实假设在步骤 (1) 和 (2) 之间没有发生其他活动;否则可能需要更多的摆弄。