【问题标题】:Delete and ignore file from git, but do not delete everywere [duplicate]从git中删除并忽略文件,但不要删除everywere [重复]
【发布时间】:2013-03-06 13:08:22
【问题描述】:

以下情况:

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

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

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

这可能吗?如何实现?

【问题讨论】:

  • @JamesMcLaughlin 我不会认为这是该问题的重复。那个人询问是否删除文件,但将其保留在当前工作树中。这个问题询问是否将其保留在存储库的任何其他副本的工作树中,这是一件困难得多的事情,另一个问题的公认答案不起作用。

标签: git version-control


【解决方案1】:

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

【讨论】:

  • 但是当另一个开发者拉取时,他会得到这个“删除命令”,git会删除他的文件。
【解决方案2】:

没有一种方法可以精确地完成您正在寻找的事情。但以下可能对您有用。

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2020-11-29
      • 2012-07-05
      • 2011-02-12
      • 2015-11-30
      • 2016-05-02
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多