首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能让‘`git’总是在文件更改上发生冲突吗?

我能让‘`git’总是在文件更改上发生冲突吗?
EN

Stack Overflow用户
提问于 2015-02-07 02:00:40
回答 2查看 770关注 0票数 4

我希望我有一个简单的问题给你,但我在任何地方都找不到答案(我已经找了两天了,也许我是个傻瓜?)我正在尝试开发一个git工作流,以便与我的LaTeX顾问协作编辑PhD文件。我们面临的问题是由于git merge的行为(因为它会自动合并)。我希望git在任何时候看到文件更改时都会发生冲突,即使它是加、减或微小的更改,这可能吗?这样,我们既可以选择变化,又能不断地推动掌握。

我不反对使用另一个工具,但我不希望创建一个复杂的分支系统。当2-3个人在同一个文件上工作时,我认为分支是不必要的。非常感谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-07 05:06:16

作为vcsjones noted in a comment,您几乎必须在这里使用--no-commit来阻止合并,即使git认为进行得很好。

关于后续的问题,您可以通过多种方式获取git来提取文件的两个合并版本。最简单的可能是使用git show。(但请注意,这绕过了污点过滤器。)

当合并停止时,HEAD将当前提交命名为当前提交,MERGE_HEAD命名正在合并的提交(这假设正在进行两个父级合并;我从未对章鱼合并进行过此操作),因此,如果您有git认为合并正确的文件foo.tex,并且您想亲自检查它,您可以这样做:

代码语言:javascript
复制
$ git show HEAD:foo.tex > foo.tex.head
$ git show MERGE_HEAD:foo.tex > foo.tex.merge_head
$ vimdiff foo.tex foo.tex.head foo.tex.merge_head

这个特殊的命名方案(添加.head.merge_head后缀)不是很聪明,当然,如果您实际上有一个名为foo.tex.head的“真实”文件,那么它可能会失败,因此对于一个健壮的工具,您可能希望创建临时目录。这实际上可以使这个过程更容易,因为您可以使用git checkout (它确实应用了污点过滤器)来填充临时目录。例如,这有点浪费(查看整个HEADMERGE_HEAD树,而不是每个文件):

代码语言:javascript
复制
$ hd_tree=/tmp/head.$$ mhd_tree=/tmp/merge_head.$$
$ index=/tmp/index.$$
$ mkdir $hd_tree $mhd_tree
$ GIT_INDEX_FILE=$index GIT_WORK_TREE=$hd_tree git checkout HEAD -- .
$ GIT_INDEX_FILE=$index GIT_WORK_TREE=$mhd_tree git checkout MERGE_HEAD -- .

现在,对于您想要处理的每个文件$f,请检查:

代码语言:javascript
复制
$ vimdiff $f $hd_tree/$f $mhd_tree/$f

完成所有操作后,rm -rf $hd_tree $mhd_tree $index将丢弃临时工作树和虚拟索引。

为了减少文件空间的浪费(但要使用更多的进程),请使用上面的GIT_WORK_TREE环境设置,一次一次检查每个文件的GIT_WORK_TREE。( GIT_INDEX_FILE在这里是因为checkout通过索引进行写入,而且您真的不希望在.git/index中覆盖git的合并版本。)

请注意,上述任何一项都没有经过测试;请注意。

票数 0
EN

Stack Overflow用户

发布于 2015-02-07 19:38:29

停止使用--no-commit完成合并

获取通过执行git diff --name-only HEAD...MERGE_HEADgit diff --name-only MERGE_HEAD...HEAD而在双方更改的文件列表

将两个文件列表重定向到comm -12,以获得两个分支修改的文件。

请注意以下事项

*例如:0 :README,:README A冒号,可选地后面跟着一个阶段号(0至3)和冒号,后面跟着路径,在给定路径的索引中命名blob对象。缺少的阶段号(以及后面的冒号)指定了一个0级条目。在合并过程中,阶段1是共同的祖先,阶段2是目标分支的版本(通常是当前分支),阶段3是要合并的分支的版本。

对于comm输出中列出的每个文件,您可以调用git difftool (假定这将为您调用vimdiff ),并指定任意组合:0:、:1:、:2:、:3:您希望看到不同的差异。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28377725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档