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/
文件夹,我不在乎它是 theirs
、ours
还是其他策略,但我需要将其保留在修订控制中,因为这是部署到 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 repo执行时,GitHub不强制执行.gitattributes
Git 索引和工作树 EOL 值与 .gitattributes 中设置的值不匹配