1

以下情况:

我们在 GIT 中有一些本地配置文件,应该将其删除。

如果我们只是做 agit rm并将其添加到 中.gitignore,则该文件将在每个开发人员的计算机上被删除。

但我们想避免这种情况——该文件不应再是 git 存储库,但也不应在拉取/合并时删除。

这可能吗?如何?

4

3 回答 3

1

没有办法精确地做你正在寻找的东西。但以下内容可能对您有用。

在对现已删除的答案的评论中,您表示您的目标是用该文件的模板替换要删除的文件。如果该模板文件是由删除旧文件的同一提交创建的,并且文件足够相似,那么 git 会将其检测为重命名(这实际上就是git mv这样做的)。

当其他开发人员随后尝试将该更改合并到他们的存储库中时,他们的副本将被重命名而不是被删除。如果很可能他们对文件进行了本地更改,这将阻止该提交被合并。那时,他们可以简单地将他们的文件版本复制到一个临时名称,并用于git checkout HEAD <thefile>放弃他们对原始文件的更改。这将允许合并继续进行,包括重命名。之后,他们可以将临时副本移回原始名称。

这确实需要在该存储库的每个非裸副本中进行一些工作,但在任何情况下都不应该导致工作被删除。

于 2013-03-06T14:40:01.203 回答
1

git rm --cached保留本地文件,但从 repo 中删除它们。

于 2013-03-06T13:12:26.957 回答
0

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) 之间没有发生其他活动;否则可能需要更多的摆弄。

于 2013-03-06T18:36:40.263 回答