如何配置git mergetool配置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何配置git mergetool配置相关的知识,希望对你有一定的参考价值。
参考技术A 先来说说git
所保存的对象。对于
git
来说,
commits
,文件,
branches
都是一些对象。
commits
保存的是一些文本文件之间
diff
(只对文本文件来说)。所谓的
merge
就是把那些
diff
在某些
commit
点上面重播(
replay)一次。
可是
git
的
merge
没有直接
merge
一系列
commits
的功能。对于一个
commit
,我们可以使用
cherry-pick
来把那个
commit
replay
到其它
commit
点上面。对于一系列的
commit
,这样做很麻烦,假如发生冲突麻烦更加大,你必须记住在
replay
到哪个
commit
的时候发生冲突,解决完之后还必须到跳过那个
commit
继续
cherry-pick。
git
的
rebase
能达到此目的。它和
merge
的不同之处在于
merge
是在历史记录分开的时候那个点开始重播的,而rebase
是保存好在
upstream
没有的
commits
,然后把那些
commits
重播在新的
base
点上。
假设要把
branches
A
中
commit
c-d
(从
a-f
)
merge
到
branch
B
有两种方法:
方法一:首先用从
A
创建新的分支
A1
,用
branch
–f
d
去除
commit
e
f
,然后用
rebase
去除
commit
a
,
b(详情见
rebase
--help
)。然后把
branch
B
rebase
到
branch
A1
上
方法二:首先从
A
创建新的分支
A1
,用
branch
–f
d
去除
commit
e
f
。然后用
rebase
–onto
B
b
A1
把
A1“嫁接”(
transplant
)到
B
上。
方法一方法二的区别在于
c-d
应用的位置不同,方法一会出现在
B
的最前面;方法二相反。
使用 Sublimerge 配置 git mergetool
【中文标题】使用 Sublimerge 配置 git mergetool【英文标题】:Configure git mergetool with Sublimerge 【发布时间】:2014-07-20 13:42:54 【问题描述】:我配置了我的 git 来解决与 Sublimerge 的合并冲突。 为此,我被跑了:
git config --global merge.tool sublimerge
git config --global mergetool.sublimerge.cmd 'subl -n --wait \"$REMOTE\" \"$BASE\" \"$LOCAL\" \"$MERGED\" --command \"sublimerge_diff_views\"'
git config --global mergetool.sublimerge.trustExitCode 'false'
git config --global diff.tool sublimerge
git config --global difftool.sublimerge.cmd 'subl -n --wait \"$REMOTE\" \"$LOCAL\" --command \"sublimerge_diff_views \\\"left_read_only\\\": true, \\\"right_read_only\\\": true\"'
当我运行 git mergetool 时,Sublime 将打开四列:.remote、.base、.local 和当前文件。但是,所有列都是空的。
并且所有列名的文件扩展名后都有一个“,例如:file.php.REMOTE.44625.php”、file.php.BASE.44625.php“、file.php.LOCAL.44625.php”和file.php”。然后我无法编辑冲突。
谁能帮帮我?
【问题讨论】:
***.com/q/19297084/6309 的答案之一会有帮助吗? @VonC,不...我已经看到了这个答案。 它是否有效git difftool
?崇高的文本控制台(ctrl`)中有什么吗?大概你正在使用 linux/mac?你在全局配置文件 ~/.gitconfig 中得到了什么?
使用 Git 2.22(2019 年第二季度,五年后),git config --global merge.tool smerge
就足够了。见my answer below。
【参考方案1】:
在你的 ~/.gitconfig 中添加以下内容
[merge]
tool = sublimerge
[mergetool "sublimerge"]
cmd = subl -n --wait \"$REMOTE\" \"$BASE\" \"$LOCAL\" \"$MERGED\" --command \"sublimerge_diff_views\"
trustExitCode = false
[diff]
tool = sublimerge
[difftool "sublimerge"]
cmd = subl -n --wait \"$REMOTE\" \"$LOCAL\" --command \"sublimerge_diff_views \\\"left_read_only\\\": true, \\\"right_read_only\\\": true\"
【讨论】:
这对我有用,在命令$> git difftool
并回答提示 Y/n 之后。【参考方案2】:
添加 git 合并工具作为 sublime 编辑器后,然后验证 ~/.gitconfig 文件。
$git config --list
user.email=xyz@live.com
user.name=xyz
color.ui=true
color.status=auto
color.branch=auto
push.default=matching
branch.autosetuprebase=always
core.editor=subl -n -w
merge.tool=sublimerge
mergetool.sublimerge.cmd=subl -n --wait \"$REMOTE\" \"$BASE\" \"$LOCAL\" \"$MERGED\" --command \"sublimerge_diff_views\"
mergetool.sublimerge.trustexitcode=false
diff.tool=sublimerge
difftool.sublimerge.cmd=subl -n --wait \"$REMOTE\" \"$LOCAL\" --command \"sublimerge_diff_views \\\"left_read_only\\\": true, \\\"right_read_only\\\": true\"
如果没有反映则手动添加合并工具详情
$vim ~/.gitconfig
[core]
editor = subl -n -w
[merge]
tool = sublimerge
[mergetool "sublimerge"]
cmd = subl -n --wait \\\"$REMOTE\\\" \\\"$BASE\\\" \\\"$LOCAL\\\" \\\"$MERGED\\\" --command \\\"sublimerge_diff_views\\\"
trustExitCode = false
[diff]
tool = sublimerge
[difftool "sublimerge"]
cmd = subl -n --wait \\\"$REMOTE\\\" \\\"$LOCAL\\\" --command \\\"sublimerge_diff_views \\\\\\\"left_read_only\\\\\\\": true, \\\\\\\"right_read_only\\\\\\\": true\\\"
【讨论】:
以上是关于如何配置git mergetool配置的主要内容,如果未能解决你的问题,请参考以下文章
apache_conf 将DiffMerge配置为默认git mergetool
使用 IntelliJ 作为 git mergetool 总是一启动就退出
02_创建Git仓库,克隆仓库,git add,git commit,git push,git pull,同行冲突,不同行冲突的结局方案,git mergetool的使用