Git:在 gitattribute 中为整个文件夹指定一个 git 合并策略“我们的”(或者只是禁用特定文件夹上的合并错误?)

Posted

技术标签:

【中文标题】Git:在 gitattribute 中为整个文件夹指定一个 git 合并策略“我们的”(或者只是禁用特定文件夹上的合并错误?)【英文标题】:Git: specifying a git merge strategy "ours" in gitattribute for a whole folder (or just disable merge errors on specific folder?) 【发布时间】:2014-02-14 01:35:15 【问题描述】:

我需要从合并错误中排除 dist/ 文件夹,我不在乎它是 theirsours 还是其他策略,但我需要将其保留在修订控制中,因为这是部署到 Heroku。 .gitattributes 脚​​本似乎是要走的路。但我似乎无法完成这项工作。

我读到了这个canonical answer 和这个similiar answer,但不知道我做错了什么。

我的.gitattributes 配置:

* text=auto
dist/ merge=keepMine

.git/config的相关部分:

[merge "keepMine"]
    name = always keep mine dist during merge
    driver = keepMine.sh %O %A %B

keepMine.sh(在我的项目根文件夹中,没有文件夹不在路径中,但是复制到路径中的文件夹没有帮助,也不是一个好的解决方案,因为脚本应该是修订控制,以便所有开发人员都能获得它):

# copied as is from the SO answer
# I want to keep MY version when there is a conflict
# Nothing to do: %A (the second parameter) already contains my version
# Just indicate the merge has been successfully "resolved" with the exit status
exit 0

编辑: 还尝试了git config merge.keepMine.driver true,如上述 SO 答案之一中所建议的那样。没用。

但我仍然遇到合并错误(如果我创建它们),例如在 dist/styles/sdkasl.main.css 中。

我做错了什么?感谢您的帮助。

【问题讨论】:

我充其量只是一个 git 新手,但过去几天我一直在关注这个问题,希望能找到解决您问题的方法。你解决了吗?如果没有,也许How to make git ignore a directory while merging 可以提供帮助? @ChronoKitsune 这是另一个问题,我不想进行手动合并(该答案会有所帮助)而是自动合并.. 我刚刚尝试了您描述的内容,它对我有用。您能否使用失败合并的输出更新您的问题?例如。 GIT_TRACE=2 git 合并 ... 请发布git check-attr --all dist/styles/sdkasl.main.css的输出 这不应该是 .gitattributes 文件中的dist/** 吗? 【参考方案1】:

documentation 在这个中不是很好。

您还可以使用 Git 属性告诉 Git 对项目中的特定文件使用不同的合并策略。

听起来不错!我们可以阅读关于合并策略 here 的信息,并且有一个名为 ours 的策略非常有用。

不幸的是,下一行打破了这个梦想。强调我的。

一个非常有用的选项是告诉 Git 不要尝试合并特定文件当它们发生冲突时,而是使用你的合并而不是其他人的。

很遗憾,如果feature 中对dist/ 的更改与master 不冲突,那么它们将合并到master 上的dist/。您在上面链接的question 的第二个answer 讨论了这一点。

我建议使用 post merge hook 将 dist/ 重置为某种原始状态。

【讨论】:

以上是关于Git:在 gitattribute 中为整个文件夹指定一个 git 合并策略“我们的”(或者只是禁用特定文件夹上的合并错误?)的主要内容,如果未能解决你的问题,请参考以下文章

git配置文件—— .gitattributes

当本地git repo执行时,GitHub不强制执行.gitattributes

Git - push超大文件到远程仓库

Git 索引和工作树 EOL 值与 .gitattributes 中设置的值不匹配

在gitattributes文件的一行中使用多个过滤器是否存在固有问题?

Git设定不合并的文件