【发布时间】:2015-06-15 10:58:50
【问题描述】:
我想做什么
我有一个包含敏感数据的文件,所以我不想将此文件的内容推送到远程服务器。
我做了什么?
为了实现这一点,我在文件为空时进行了提交,并将这个空文件推送到服务器(GitHub)。然后用敏感数据填充文件并应用 git update-index --skip-worktree path/to/file 。但我没有做出任何承诺。
现在我正在尝试切换我的分支,但我收到了这个错误:
error: Your local changes to the following files would be overwritten by checkout:
path/to/file
Please, commit your changes or stash them before you can switch branches.
Aborting
为什么我使用skip-worktree 而不是assume-unchanged?
我阅读了一些关于这个主题的 SO 问题,并找到了 Borealid's answer。
--assume-unchanged 假定开发人员不应该更改文件。此标志旨在提高 SDK 等不更改文件夹的性能。
--skip-worktree 当你指示 git 不要接触特定文件时很有用,因为开发人员应该更改它。例如,如果上游的主存储库托管了一些生产就绪的配置文件,并且您不想意外提交对这些文件的更改,那么 --skip-worktree 正是您想要的。
在这之后,我找到了Jeff's question 和VonC's answer。 Jeff 的问题和我的差不多,我跟着 VonC 的解决方案。但是,这对我不起作用。可能是因为 git 版本不同。因为那个问题来自 2012 年。我们与 VonC 进行了交谈,他说这是一个新问题,因为他不记得答案了。
我尝试同时使用--assume-unchanged 和--skip-worktree,以及软重置工作树。但什么都没有改变。
所以?
你能帮我解决我的问题吗?
谢谢。
【问题讨论】:
-
我试图重现该问题,但它对我有用。我可以重现它的唯一方法是我的私人文件在我的分支之间是否不同。您是否仔细检查过您的分支之间的
path/to/file是否完全相同?做git diff branch1..branch2 -- path/to/file. -
@Eray Justin 是对的。您必须确保有问题的文件(在 --skip-worktree 之前)在您的分支中是相同的。
-
我要补充一点,如果您尝试签出的分支中根本不存在 path/to/file ,也会发生这种情况。因为当您尝试签出时,git 会尝试删除已签出分支中不存在的文件。 “您必须确保所讨论的文件在您的分支中是相同的”这句话暗示了这一点,但我认为最好明确说明
标签: git git-branch git-assume-unchanged git-skip-worktree