2013-03-06 104 views
1

以下情况:删除并忽略git中的文件,但不要删除everywere

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

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

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

这是可能的和如何?

+0

@JamesMcLaughlin我不认为这是该问题的重复。那个人问的是删除一个文件,但是将它保存在当前工作树中。这个问题是关于将其保存在工作树中以用于存储库的任何其他副本,而另一个问题的接受答案将不起作用更困难。 – qqx 2013-03-06 13:50:37

回答

1

git rm --cached保留本地文件,但将其从回购中删除。

+1

但是,当另一个开发人员进行拉取时,他会得到这个“删除命令”,git会删除他的文件。 – Alex 2013-03-06 13:27:05

1

有没有一种方法可以精确地做你正在寻找的东西。但以下内容可能适用于您。

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

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

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

0

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