【问题标题】:What's the best way to exclude files from a merge that I have included in my ".git/info/exclude" file?从我的“.git/info/exclude”文件中包含的合并中排除文件的最佳方法是什么?
【发布时间】:2020-02-05 04:16:50
【问题描述】:

我在“.git/info/exclude”文件中指定了一些文件,因此当我提交时,这些文件不会暂存/包含在提交中。我想在合并时保留这些文件的本地版本。我已经设置了一个“我们的”合并驱动程序并适当地设置了“.git/info/attributes”文件(我认为);但是,我认为没有使用该驱动程序,因为我认为 git 在尝试合并时不会检测到这些文件中的任何冲突。

这是我的“.git/info/exclude”文件(它给了我我想要的——这些文件永远不会被暂存):

/IDWA.Client/dmsConfig.json
/IDWA.Server.AppServer/client-config*.*
/IDWA.Server.AppServer/dmsConfig.json

这是我的“.git/info/attributes”文件(它似乎根本没有做任何事情;再次,我认为是因为 git 在尝试合并时没有检测到任何冲突):

/IDWA.Client/dmsConfig.json merge=ours
/IDWA.Server.AppServer/client-config*.* merge=ours
/IDWA.Server.AppServer/dmsConfig.json merge=ours

驱动配置:

git config --global merge.ours.driver true

最后……

我只是希望能够执行 git pull 而不必担心这些文件。

【问题讨论】:

  • 您不能排除跟踪的文件。当在合并期间,both 分支提示与 merge base 提交不同时,您的 merge=ours 指令将被遵守,但如果只有一个分支提示不同,则不会:Git 将采取那个版本,不管它是谁的版本。 (如果您无法在上游正确修复它,除了忍受烦恼之外,您无能为力。)
  • @torek - 我害怕那个。

标签: git git-merge git-pull gitattributes


【解决方案1】:

这是我的“.git/info/attributes”文件(它似乎根本没有做任何事情;

只有在合并冲突的情况下才有效。

由于这些文件已被跟踪,请尝试:

git update-index --skip-worktree -- a file

见“Git - Difference Between 'assume-unchanged' and 'skip-worktree'”。

【讨论】:

  • 谢谢 - 我认为这对我来说是正确的解决方案。
【解决方案2】:

Git 竭尽全力告诉您这些文件是来自其他分支的任何内容的一部分,如果您选择继续操作,您的文件将被覆盖......所以, git 无法猜测在这种情况下你想做什么.. 如果你绝对确定文件根本不应该是项目的一部分,然后转到另一个分支并从那里删除它们然后尝试再次合并(顺便说一下......我正在以相当快的方式写这个,因为我没有正在发生的事情的所有上下文......但是从另一个分支中删除这些文件可能会对你身边,所以要小心)。

【讨论】:

  • 我想将文件保留在远程分支中,但在从远程分支提取时忽略它们(保留我的本地分支)。这些是配置文件,根据应用程序的本地设置,可能因开发人员而异。理想情况下,这些文件将完全不被跟踪和/或替换为“模板”文件,我就是这样做的,但存储库不在我的控制之下。
  • 哦,伙计......听起来像是灾难的秘诀......你是否从你的分支中删除了文件?也许您想在本地文件上尝试git update-index --assume-unchanged,而不是忽略它们。
猜你喜欢
  • 2017-03-29
  • 2014-05-19
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 2010-09-08
  • 2014-07-11
  • 1970-01-01
相关资源
最近更新 更多