- 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/
这个问题在这里已经有了答案: Why does "git difftool" not open the tool directly? (2 个答案) 关闭 6 年前。 当使用 git difftoo
我有 2 个文件夹(具有不同的代码)并初始化了 git。但是当我这样做的时候 git difftool -t meld 一个存储库运行良好,并询问我是否要在 meld 中打开文件进行比较。另一个只是在
我正在使用 kdiff3 作为 difftool。当我使用 git difftool 命令时,它还会向我显示完全相同的文件。甚至 kdiff3 也会 pop 一条消息,指出这些文件是“二进制相等的”(
当我执行 git difftool 时,我收到消息 Hit return to launch 'araxis':。我发现我可以通过按 CTRL-C 来终止整个比较,但是跳过单个文件怎么样? 这可能吗?
我的 ~/.gitconfig 中有以下配置 [diff] tool = vimdiff [diftool] prompt = false 当我启动 git difftool 时,它默
是否可以让 git difftool 命令打开一个目录,比较更改的文件和暂存/检查的文件? 理想情况下,如果有 2 个文件已更改,它们将是唯一显示的 2 个,但在目录比较中。 我读过有关让 git 并
我已将我的 git difftool 设置为使用 winmerge。它已经工作了很长一段时间。但是今天突然不行了。 git difftool 曾经在脏文件上一个接一个地调用 winmerge,但现在不
我已将 Meld 配置为我的 difftool。我很确定它配置正确,因为如果我这样做 git config -l ,我得到 merge.tool=meld diff.tool=meld mergeto
我正在尝试在 Windows 8.1 系统上的 Git Bash 中使用 KDiff3 作为 difftool,我承认我对 Git 很陌生。当我尝试将暂存文件与提交文件进行比较时,我无法打开 KDif
我已经将 Beyond Compare 配置为 difftool。 当我运行 $ git difftool 时,它会打开 BC 中的所有 diff 文件,但顺序是,即第一个 diff 文件打开,我必须
我使用 Windows 版 git bash 和 Beyond & Compare 作为我的差异工具(但同样的事情发生在任何外部差异工具上)。 我希望我的终端不要等待 difftool 退出以返回终端
我在文件 .gitconfig 中为 KDiff3 配置了以下 difftool, [difftool "kdiff3"] external = '"C:/Program Files/KDif
看来git difftool执行外部命令时,没有正确引用参数。 如果 .gitconfig 包含以下几行: [difftool.echo] cmd = echo "$LOCAL" "$REMOTE
我有许多新文件以及一些已添加到我的分支的修改过的文件,当我执行 git difftool master 时,它会比较所有修改过的文件并打开所有新文件。我看到类似的东西 Launching WinMer
我这样配置 git: git config --global diff.tool meld 当我运行时: git difftool 我收到以下消息: Viewing: 'hello.txt' Hit
是否可以通过 git add --patch 配置 Git 以使用我配置的 difftool? 我想通过我自己的 difftool 选择要添加到索引的更改。 最佳答案 不,不幸的是。 我想我可以看到工
默认的 git diff 行为是依次打开每个 diff 文件(在打开下一个文件之前等待上一个文件关闭)。 我正在寻找一种同时打开所有文件的方法 - 例如,在 BeyondCompare 中,这将在同一
这个问题在这里已经有了答案: Show both staged & working tree in git diff? (3 个答案) 关闭 5 年前。 有没有办法查看同一文件的 staged 和
当使用“git difftool”时,当其中一个文件是最新版本时,它会将相对路径传递给外部 diff 应用程序。 ~/.gitconfig [difftool "echo"] cmd = ec
我想在单一 View 中查看对所有文件的更改,如图所示;最好选择两个修订版并从 GUI 启动 diff。 我能得到的最接近的是启动 git difftool -t meld -d 2e9c5b 4fc
我是一名优秀的程序员,十分优秀!