- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尽管此问题和答案中的大部分信息都可以在 StackOverflow 上找到,但它散布在许多页面上以及其他错误或误导性的答案中。我花了一段时间才把我想知道的一切拼凑起来。
有很多不同的程序可以用作您的 git difftool 和 mergetool,并且对于哪个是最好的肯定没有共识(意见、要求和操作系统会明显不同)。
Meld 是一种流行的免费、开源和跨平台(UNIX/Linux、OSX、Windows)选择,如 StackOverflow 问题 What's the best visual merge tool for Git? 所示。 ,其中提出 Meld 的答案的票数是任何其他工具的 3 倍以上。
以下2个问题将在我的回答中得到解答:
最佳答案
如何设置和使用 Meld 作为我的 git difftool?
git difftool使用 GUI 差异程序(即 Meld)显示差异,而不是在终端中显示差异输出。
尽管您可以使用 -t <tool> / --tool=<tool>
在命令行上设置 GUI 程序在您的 .gitconfig
中配置它更有意义文件。 [注意:请参阅底部有关转义引号和 Windows 路径的部分。]
# Add the following to your .gitconfig file.
[diff]
tool = meld
[difftool]
prompt = false
[difftool "meld"]
cmd = meld "$LOCAL" "$REMOTE"
git diff
的行为它将继续照常运作。]
git difftool
与您使用
git diff
的方式完全相同.例如
git difftool <COMMIT_HASH> file_name
git difftool <BRANCH_NAME> file_name
git difftool <COMMIT_HASH_1> <COMMIT_HASH_2> file_name
$LOCAL
的顺序控制。和
$REMOTE
在
cmd
,也就是说哪个文件显示在左 Pane 中,哪个显示在右 Pane 中。如果你想要它们反过来,只需像这样交换它们:
cmd = meld "$REMOTE" "$LOCAL"
prompt = false
行只是阻止 git 提示您是否要启动 Meld,默认情况下 git 会发出提示。
-t <tool> / --tool=<tool>
在命令行上设置 GUI 程序。但是,和以前一样,在您的
.gitconfig
中配置它更有意义。文件。 [注意:请参阅底部有关转义引号和 Windows 路径的部分。]
# Add the following to your .gitconfig file.
[merge]
tool = meld
[mergetool "meld"]
# Choose one of these 2 lines (not both!) explained below.
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
git mergetool
执行实际 merge 。使用前
git mergetool
您以通常的方式使用 git 执行 merge 。例如
git checkout master
git merge branch_name
$ git merge branch_name
Auto-merging file_name
CONFLICT (content): Merge conflict in file_name
Automatic merge failed; fix conflicts and then commit the result.
file_name
将包含带有 merge 冲突信息的部分 merge 文件(即包含所有
>>>>>>>
和
<<<<<<<
条目的文件)。
git mergetool
.gitconfig
上面的条目,建议将 2 行作为
[mergetool "meld"]
cmd
线。事实上,高级用户可以通过各种方式配置
cmd
行,但这超出了本答案的范围。
cmd
它们之间的线条将迎合大多数用户,并且对于希望将该工具提升到下一个复杂级别的高级用户来说,这将是一个很好的起点。
$LOCAL
是当前分支中的文件(例如 master)。 $REMOTE
是正在 merge 的分支中的文件(例如 branch_name)。 $MERGED
是包含 merge 冲突信息的部分 merge 文件。 $BASE
是 $LOCAL
的共享提交祖先和 $REMOTE
, 这就是当包含 $REMOTE
的分支时的文件最初创建。 [mergetool "meld"]
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
[mergetool "meld"]
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
# See 'Note On Output File' which explains --output "$MERGED".
$MERGED
或
$BASE
中间
$LOCAL
和
$REMOTE
.
$LOCAL
的 Pane 和
$REMOTE
在左右 Pane 和
$MERGED
中或
$BASE
在中间 Pane 中。
$MERGED
对于包含带有 merge 冲突信息的部分 merge 文件的文件或
$BASE
对于
$LOCAL
的共享提交祖先和
$REMOTE
. [由于两者
cmd
行可能很有用,我将它们都保存在我的
.gitconfig
中文件。大多数时候我使用
$MERGED
线和
$BASE
行被注释掉了,但是如果我想使用
$BASE
可以交换注释掉线代替。]
--output "$MERGED"
用于
cmd
不管是否
$MERGED
或
$BASE
早先在
cmd
中使用过线。
--output
选项只是告诉 Meld git 希望将冲突解决文件保存在哪个文件名中。无论您是否使用
$MERGED
,Meld 都会将您的冲突编辑保存在该文件中。或
$BASE
作为您的起始编辑点。
.orig
来备份部分 merge 的文件,其中包含 merge 冲突信息。到原始文件名。例如
file_name.orig
.在检查您对 merge 是否满意并运行您可能希望执行的任何测试后,
.orig
文件可以删除。
file_name seems unchanged
然后问
Was the merge successful? [y/n]
, 如果你回答
n
那么 merge 冲突解决将被中止,文件将保持不变。请注意,如果您在任何时候将文件保存在 Meld 中,那么您将不会收到来自 git 的警告和提示。 [当然你可以直接删除文件并用备份替换它
.orig
git 为你制作的文件。]
git mergetool
的使用是明智的。在实际项目中使用它之前。确保在测试中使用包含空格的文件名,以防您的操作系统要求您转义
cmd
中的引号。行,见下文。
cmd
中有引号逃脱了。经验不足的用户应该记住,配置命令行应该使用包含空格的文件名进行测试,如果
cmd
行不适用于包含空格的文件名,然后尝试转义引号。例如
cmd = meld \"$LOCAL\" \"$REMOTE\"
cmd = meld \\\"$LOCAL\\\" \\\"$REMOTE\\\"
cmd
线。他们可能需要使用到
meldc
的完整路径。 ,它旨在从命令行在 Windows 上调用,或者他们可能需要或想要使用包装器。他们应该阅读下面链接的 StackOverflow 页面,这些页面是关于设置正确的 Meld
cmd
适用于 Windows 的线。由于我是 Linux 用户,因此无法测试各种 Windows
cmd
除了推荐使用我的示例并添加到 Meld 或
meldc
的完整路径之外,没有关于该主题的更多信息。 ,或将 Meld 程序文件夹添加到您的
path
.
Text Filters
选项卡有几个有用的过滤器可以在执行差异时忽略诸如注释之类的内容。尽管有过滤器可以忽略
All whitespace
和
Leading whitespace
,没有忽略
Trailing whitespace
过滤器(这已被建议添加到 Meld 邮件列表中,但在我的版本中不可用)。
Text Filters
标签。
# Use either of these regexes depending on how comprehensive you want it to be.
[ \t]*$
[ \t\r\f\v]*$
关于git - 设置和使用 Meld 作为你的 git difftool 和 mergetool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34119866/
git mergetool 命令性能似乎相当慢,尤其是与 hg merge 相比。这是一个记录在案的问题吗?有什么方法可以加快速度吗? 在运行命令时,我们花了很多时间等待每个文件差异的显示。 最佳答案
git-mergetool 是否有一个标志,其行为类似于 --follow from git-log? --follow Continue listing the history
在机器 A 上,git mergetool 按预期运行 Beyond Compare 3。在机器 B 上,BC3 启动但未在命令行上传递任何参数,因此显示介绍屏幕而不是实际 merge 。 我将配置从
merge 后,我想使用 git mergetool 来解决问题,但无论我指定什么工具,它都失败了: git mergetool
我安装了 meld,运行 git mergetool , merge 左右文件到中心文件,保存,关闭窗口。我记得其他时候 mergetool 询问 merge 是否成功,但这次没有(我会回答"is")
我已经执行了 git mergetool 来尝试解决一些 merge 冲突。 它会打开 3 个文本窗口(在我的 SSH 终端内),每个窗口都有不同版本的代码。 我要的代码在右边的窗口中。 我如何告诉
当运行 git mergetool 时,我想让 git 根据文件扩展名选择使用的 merge 工具。我怎样才能做到这一点? 此处提出了类似的问题:Git: configure patterns for
我想在 libgit2sharp 中使用“git mergetool”的等效项。有没有样本可以做到这一点?还是我必须深入研究并尝试在 libgit2sharp 中实现它? “git mergetool
作为 git pull 命令的结果,我使用 git mergetool 命令对一些冲突文件进行了一些更改,但我想将其还原到我使用 mergetool 进行更改之前的状态。 基本上就是git警告有冲突并
我有冲突,所以我输入: git mergetool 然后我收到一条消息说: Hit return to start merge resolution tool 通常当我这样做时,它会打开 kdiff3
当我使用 Kdiff3(以及我尝试过的其他 merge 工具)执行 merge 冲突解决时,我注意到在解决时创建了一个 *.orig 文件。有没有办法让它不创建那个额外的文件? 最佳答案 来自 git
我如何强制始终显示 mergetool GUI 并禁用任何自动解析? 有时当在 merge 过程中发生冲突并且我使用 mergetool 时,它会在我点击Enter 问题“点击返回开始 merge 解
我发现 git mergetool 是一个方便的实用工具,可以直观地 merge 差异,但我的处理方式似乎很奇怪。本质上,当报告冲突时,我的流程如下所示: 执行 git mergetool 在出现提示
我在 git 中使用 DiffMerge 进行三向 merge 。我刚刚完成了一项强制 merge 工作,但意识到我遗漏了一些东西,想重新 merge 并使用相同的 3 向 GUI 功能。当我尝试时:
我正在使用 CLI mergetool vimdiff 而不是逐行输入 :diffg RE 为每个更改选择 REMOTE 版本,有没有办法我可以只将整个文件的远程版本作为目标 merge 吗? 最佳答
如描述中所述。我什至不希望在自动解决 merge 冲突时提示解决 merge 冲突。 我的场景是,我在一个分支上的文本文件中添加一行包含固定文本字符串的行,在同一分支上做一些其他提交,然后在另一个分支
在 Mercurial 中,可以为外部 diff 和 merge 工具定义一个模式(这样它们只会被与指定模式匹配的文件调用): [diff-patterns] **.ext = difftool [m
我配置我的 git 来解决与 Sublimerge 的 merge 冲突。为此,我跑了: git config --global merge.tool sublimerge git config --
是否可以在 Git 中设置一个自定义工具来 merge 具有特定扩展名的文件? 谢谢指点! 更新 除了定义自定义 difftool 并按照@jarodeells 的建议手动调用它之外,我想不出任何更好
git config --global mergetool.bc3 "\"c:/program files (x86)/beyond compare 3/bcomp.exe\"\"$LOCAL\"\"
我是一名优秀的程序员,十分优秀!