gpt4 book ai didi

Git:如何从索引中删除文件而不从任何存储库中删除文件

转载 作者:IT王子 更新时间:2023-10-29 01:17:53 28 4
gpt4 key购买 nike

当你使用

git rm --cached myfile

它不会从本地文件系统中删除,这是目标。但是,如果您已经对文件进行了版本控制和提交,将其推送到中央存储库,并在使用该命令之前将其 pull 入另一个存储库,则它将从该系统中删除该文件。

有没有办法只从版本控制中删除文件而不从任何文件系统中删除它?

编辑:澄清,我希望。

最佳答案

我不认为 Git 提交可以记录“停止跟踪这个文件,但不要删除它”这样的意图。

制定这样的意图将需要在 Git 之外的任何存储库中进行干预,这些存储库 merge (或 rebase 到)删除文件的提交。

保存副本、应用删除、还原

可能最简单的方法是告诉您的下游用户保存文件的副本,删除您的删除内容,然后恢复文件。
如果他们通过 rebase pull 并“携带”对文件的修改,他们就会发生冲突。要解决此类冲突,请使用 git rm foo.conf && git rebase --continue (如果冲突提交除了对已删除文件的更改之外还有其他更改)或 git rebase --skip (如果冲突提交仅更改为已删除的文件)。

在 pull 删除文件的提交后将文件恢复为未跟踪

如果他们已经 pull 了您的删除提交,他们仍然可以使用 git show 恢复文件的先前版本。 :

git show @{1}:foo.conf >foo.conf

或与 git checkout (根据 William Pursell 的评论;但请记住将其从索引中重新删除!):
git checkout @{1} -- foo.conf && git rm --cached foo.conf

如果他们在删除您的删除后采取了其他操作(或者他们正在将 rebase pull 入分离的 HEAD),他们可能需要除 @{1} 以外的其他内容。 .他们可以使用 git log -g在他们删除您的删除之前找到提交。

在评论中,您提到要“取消跟踪但保留”的文件是运行软件所需的某种配置文件(直接从存储库中提取)。

将文件保留为“默认”并手动/自动激活它

如果继续在存储库中维护配置文件的内容并非完全 Not Acceptable ,您可以将跟踪文件从(例如) foo.conf 重命名。至 foo.conf.default然后指示您的用户 cp foo.conf.default foo.conf应用重命名提交后。
或者,如果用户已经使用存储库的某些现有部分(例如脚本或由存储库中的内容(例如 Makefile 或类似)配置的某些其他程序)来启动/部署您的软件,您可以将默认机制 merge 到启动/部署过程:
test -f foo.conf || test -f foo.conf.default &&
cp foo.conf.default foo.conf

有了这样的默认机制,用户应该能够 pull 重命名 foo.conf 的提交。至 foo.conf.default无需做任何额外的工作。
此外,如果您将来进行其他安装/存储库,则不必手动复制配置文件。

无论如何,重写历史都需要人工干预……

如果在存储库中维护内容是 Not Acceptable ,那么您可能希望使用诸如 git filter-branch --index-filter … 之类的东西将其从历史中完全消除。 .
这相当于重写历史记录,这将需要对每个分支/存储库进行手动干预(请参阅 git rebase manpage 中的“从上游 Rebase 恢复”部分)。
配置文件所需的特殊处理只是从重写中恢复时必须执行的另一个步骤:
  • 保存配置文件的副本。
  • 从重写中恢复。
  • 恢复配置文件。


  • 忽略它以防止复发

    无论您使用什么方法,您可能都希望在 .gitignore 中包含配置文件名。存储库中的文件,以便任何人都可以不经意地 git add foo.conf再次(这是可能的,但需要 -f/ --force )。
    如果您有多个配置文件,您可能会考虑将它们全部“移动”到一个目录中并忽略整个内容(“移动”我的意思是更改程序期望找到其配置文件的位置,并获取用户(或启动/部署机制)将文件复制/移动到它们的新位置;您显然不希望将文件 git mv 放入您将忽略的目录中)。

    关于Git:如何从索引中删除文件而不从任何存储库中删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2604625/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com