以下情况:删除并忽略git中的文件,但不要删除everywere
我们在GIT中应该删除一些本地配置文件。
如果我们只是做一个git rm
并将其添加到.gitignore
,该文件将在每个开发人员的计算机上被删除。
但是我们想避免这种情况 - 该文件不应再是git存储库,但它也不应该在拉/合并时被删除。
这是可能的和如何?
以下情况:删除并忽略git中的文件,但不要删除everywere
我们在GIT中应该删除一些本地配置文件。
如果我们只是做一个git rm
并将其添加到.gitignore
,该文件将在每个开发人员的计算机上被删除。
但是我们想避免这种情况 - 该文件不应再是git存储库,但它也不应该在拉/合并时被删除。
这是可能的和如何?
git rm --cached
保留本地文件,但将其从回购中删除。
但是,当另一个开发人员进行拉取时,他会得到这个“删除命令”,git会删除他的文件。 – Alex 2013-03-06 13:27:05
有没有一种方法可以精确地做你正在寻找的东西。但以下内容可能适用于您。
在对现在删除的答案的评论中,您表示您的目标是用该文件的模板替换要删除的文件。如果该模板文件是由删除旧文件的相同提交创建的,并且这些文件足够相似,那么git会将检测到的结果视为重命名(这实际上是git mv
的作用)。
当其他开发人员尝试将更改合并到其存储库时,其副本将被重命名而不是被删除。如果可能的话,他们对文件进行了本地更改,以防止该提交被合并。此时,他们可以简单地将其文件的版本复制到临时名称,并使用git checkout HEAD <thefile>
放弃对原始文件的更改。这将允许合并进行,包括重命名。之后,他们可以将临时副本移回原始名称。
这确实需要在该存储库的每个非裸副本中进行一些工作,但绝不应导致工作被删除。
1)假设你在主分支工作:
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
'不-轨道me.txt' 现在在开发人员的工作树中作为未跟踪的文件呈现。 这确实假设步骤(1)和(2)之间没有发生其他活动;否则可能需要更多的小提琴。
@JamesMcLaughlin我不认为这是该问题的重复。那个人问的是删除一个文件,但是将它保存在当前工作树中。这个问题是关于将其保存在工作树中以用于存储库的任何其他副本,而另一个问题的接受答案将不起作用更困难。 – qqx 2013-03-06 13:50:37