【问题标题】:Stop tracking a file in git - without having it deleted either locally or on pull停止在 git 中跟踪文件 - 无需在本地或拉取时将其删除
【发布时间】:2014-08-04 16:33:00
【问题描述】:

我想忽略之前跟踪的文件/目录树 - 永远忽略它,但在拉取时被删除 - 只需在存储库拉动发生了。这可能吗 ?为什么不(如果不是)?我应该怎么做?

注意:Remove a file from a Git repository without deleting it from the local filesystem 中接受的答案 - 即 git rm --cached path - 将导致文件在拉取时被删除。讨厌。不仅如此,“如果您从删除之前签出修订版,然后从删除后签出修订版,它将删除您的文件”(请参阅​​此comment)有关其他有趣的 cmets/answers,请参阅此问题但是解决我的问题。

我完全知道--assume-unchanged 标志,但这不是我想要的——我想告诉 git(和所有存储库克隆)“嘿,停止跟踪这个文件/树”而不是“删除这个文件/树” - 所以我想在全球范围内--assume-unchanged。如果不可能(为什么?)我需要workaround

作为记录,我正在尝试引导 git 以使用它来保存/共享历史记录,并且我希望能够随意停止跟踪文件/目录 - 无需删除它们

相关:

【问题讨论】:

  • 我没有已知的答案,但我觉得可以通过将文件添加到 .gitignore 来解决这个问题。
  • 我会尝试 git rm --cached 以及将文件添加到 .gitignore
  • 正如 Pavel 在问题 you linked 中解释的那样,如果此行为不存在,那么您的工作目录将累积从存储库中删除的文件。如果其他进程最终使用了应该删除的文件,这可能会导致其他问题。此外,恢复从 repo 中删除的文件的本地副本也很简单(Pavel 的帖子中也有描述)。
  • @jamessan:读了,但这不是重点(谁说过 deleted 文件) - 相反,torek 的comment 一如既往地切中要害
  • 您说的是已删除的文件。这就是您问题的全部重点-当用户从已删除文件的 git 存储库中提取文件时,如何避免从用户的计算机中删除文件,所以我看不出这是怎么回事。

标签: git gitignore


【解决方案1】:

我遇到了同样的问题,我使用了git rm --cached <file>,它在本地工作,但是一旦我推送到远程服务器,它也删除了文件,我不想那样做。然后我找到了 git update-index --assume-unchanged <file>它会忽略本地更改并且不会从远程服务器中删除它,就像一个魅力!

【讨论】:

  • 更适合的应该是忽略子树
【解决方案2】:

这是不可能的。为了防止跟踪新的更改,您需要从存储库中删除文件(使用git rmgit rm --cached)。这添加对删除文件的提交的更改。当该更改随后应用于其他存储库时,将执行删除操作,从而导致文件被删除。

【讨论】:

  • 这听起来像是 git 的疏忽——还是我弄错了?
  • 并非如此。否则,在签出提交时,您永远无法从存储库中删除文件。
  • 与其说是“疏忽”,不如说是“完全超出设计限制”。例如,假设路径p 在第一个提交中,内容为1,在第二个提交中,内容为2,在第三个中,它被标记为“现在忽略这个,别管它”。如果您首先检查第 1 版,然后是第 3 版,然后是第 2 版,那么文件 p 中有什么内容?如果您先检查 2,然后检查 1,然后检查 3,会怎样?如果您先签出 3,然后签出 1,然后签出 2,该怎么办?
  • 感谢@torek - 这个想法是在所有 3 个场景中,rev 2 最终将被检出(rev 2 和 3 具有相同的内容) - 实际上,如果继续编辑此文件,内容将是被覆盖...无论如何 - 这个想法是很自然地能够告诉 SCM '嘿 - 停止跟踪这个文件/树' - 不仅仅是在本地。所以我唯一的解决方法是 filter-branch
  • 但是如果你下载repo,先检查rev 2,再检查rev 1,文件内容将是1。如果您随后切换到第 3 版并且文件内容变为2,那将不遵守第 3 版中的说明,即“别管它”!至于filter-branch,那 copies 提交到新的不同提交。在新的不同提交中,您可以删除该文件并创建一个 .gitignore 以防止 git 注意到该文件。然后你可以提取它的某个版本,它现在是未跟踪的。
猜你喜欢
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 1970-01-01
  • 2015-12-04
  • 2014-08-09
相关资源
最近更新 更多