防止其他分支跟踪文件

时间:2019-05-23 13:26:53

标签: git

我的主分支中有一个file.config。 我想从我的母版创建一个功能分支,但是我不希望我的file.config出现在其中。

知道我仍然想跟踪该文件发生的更改。

有办法吗?

编辑:对于上下文,config.file是一种“按钮”,用于在生产环境中部署嵌套在当前分支中的代码。这就是为什么我不希望它不在“主”之外的任何其他分支中,因为它限制了人为错误的风险。

3 个答案:

答案 0 :(得分:1)

可以告诉您的本地git,永远不要使用update-index更改特定文件。这将阻止文件显示在git status等文件中,同时将文件保留在其他所有人的存储库中。

请务必注意,尽管此更改将在您本地的git中发生,而不是在您的分支中发生。因此,如果您切换分支仍然有效,则您将无法将该更改推送到远程。

git update-index --skip-worktree file.config

如果您想再次显示此文件的更改在git status中,请运行:

git update-index --no-skip-worktree file.config

答案 1 :(得分:1)

您真的很认真地无法在Git中获得想要的东西。原因是很根本的:文件不会由于处于某个分支或不在某个分支中而被跟踪或取消跟踪。使文件被跟踪(相对于未跟踪)的原因是文件存在于 index 中(或不存在)。同时,分支 names 仅标识一个特定的提交,它们标识的那个提交可以随时更改...并且每个 commit 可以同时在许多分支中。

这三个事实-(1)跟踪与未跟踪是当前 index 内容的属性,因此没有直接与任何分支名称关联; (2)分支机构名称随时间推移; (3)提交位于多个分支中-所有交互都以对您的用例不利的方式进行。

要了解这些内容,您需要了解提交,索引和工作树之间的交互方式,将git checkout与分支名称或提交哈希一起使用时会发生什么,以及分支的创建和移动方式一般。这些都绑在一个大的Gordian Knot中……而您实际问题的解决方案是相似的:甚至不要试图解开结,只是通过保留 prototype来回避整个混乱局面的配置。进行所需的任何处理,根据需要进行构建或获取:这可能很简单:如果我刚运行git checkout master,则将原型复制到位;如果我刚运行过git checkout,使我离开master,请删除就地副本,只保留原型。

(如果要使其自动化,请查看post-checkout钩子。)

答案 2 :(得分:0)

您可以从主控器创建的其他分支中删除文件,但是如果将它们合并回主控器,则该文件将在主控器中删除(除非您不惜一切代价避免它,这总是可能的)。如果这些分支永远不会合并到master中,则只需从它们中删除文件即可。

如果您决定以这种方式执行操作,您可能会看到的另一个问题是,如果在master上更改了文件,然后将master合并到分支中,则会遇到树冲突,这是因为文件分支中缺少该文件,因此您只需告诉git在文件发生时将其删除,然后让合并完成即可。