如何在Git中将文件/文件夹排除在版本控制之外,但仍然保留在存储库中?

4
使用git rm <file>命令可以在本地删除文件,从版本控制中移除,并从仓库中删除。git rm --cached <file>几乎可以做到同样的效果,但是会保留文件在本地工作副本中。
有没有可能从版本控制中移除一个文件/文件夹(以便忽略它的更改),同时将其保留在仓库中,以便如果有人克隆仓库,该文件也在其中,但无法通过简单的addcommit更改?
3个回答

2
简短的回答是不行。 .gitignore 只能防止文件被跟踪。换句话说,它可以防止文件第一次进入存储库。然而,一旦一个文件被跟踪,就永远被跟踪。所有对该文件的更改都将被跟踪。
有两个常见的解决方案。(1) 永远不要将该文件添加到索引中。这只是一个政策问题。(2) 将所有被忽略的文件放在像UnzipMeRightAfterCloning.zip这样的归档文件中。这对于进入存储库的人来说是额外的步骤,但至少目标文件永远不会被提交。

0

已经在 Git 中的文件可以使用忽略语句忽略掉

git update-index --assume-unchanged filename 

还有一个非常有趣的功能,git - 忽略已提交的文件并切换分支

并且 unigtore git update-index --no-assume-unchanged 文件名


1
需要注意的是,在每次执行“add”操作之后和“commit”操作之前,您都必须执行该命令。 - nwalke
这个可以运行,但对于任何涉及使用 git add --all 的工作流程来说都非常不友好。 - TheBuzzSaw

-1
尝试将文件/文件夹添加到.gitignore中。

我已将该文件添加到.gitignore中,但当我编辑它时,它仍然出现在“git status”文件列表中。 - automatix
我不确定为什么会发生这种情况。在我的情况下,我已经将几个文件添加到.gitignore中,当我进行新的提交时,这些文件不会显示在存储区中。你是否在修改.gitignore文件后进行了提交?也许这就是原因。 - Josue
在我的情况下,该文件已经被版本化了。.gitignore仅适用于尚未添加到/已从版本控制中删除的文件/文件夹。 - automatix
取消跟踪文件怎么样?看这里:https://dev59.com/sGw05IYBdhLWcg3w41wp - Josue
-1 这并不是问题所要求的。因为它无法完成。 - nwalke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接