【问题标题】:beyond compare with `git difftool --dir-diff` -- Hitting an issue with sym-links无法与 `git difftool --dir-diff` 相比——解决符号链接问题
【发布时间】:2016-02-09 23:48:52
【问题描述】:

设置一个新的 git repo 并添加一些文件:

[Feb-09 18:35][Desktop]$ mkdir exampleForStackOverflow
[Feb-09 18:35][Desktop]$ cd exampleForStackOverflow/

[Feb-09 18:35][exampleForStackOverflow]$ git init
Initialized empty Git repository in ~/Desktop/exampleForStackOverflow/.git/

[Feb-09 18:35][exampleForStackOverflow]$ touch foo.txt
[Feb-09 18:35][exampleForStackOverflow]$ touch bar.txt
[Feb-09 18:35][exampleForStackOverflow]$ touch baz.txt

[Feb-09 18:36][exampleForStackOverflow]$ git add *

[Feb-09 18:36][exampleForStackOverflow]$ git commit -m "Create files"
[master (root-commit) 42bfa60] Create files
 3 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 bar.txt
 create mode 100644 baz.txt
 create mode 100644 foo.txt

修改文件:

[Feb-09 18:37][exampleForStackOverflow]$ echo "Foo" > foo.txt 
[Feb-09 18:37][exampleForStackOverflow]$ echo "Bar" > bar.txt 
[Feb-09 18:37][exampleForStackOverflow]$ echo "Baz" > baz.txt

当前状态:

[Feb-09 18:38][exampleForStackOverflow]$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   bar.txt
    modified:   baz.txt
    modified:   foo.txt

no changes added to commit (use "git add" and/or "git commit -a")

当前差异:

[Feb-09 18:38][exampleForStackOverflow]$ git diff
diff --git a/bar.txt b/bar.txt
index e69de29..ebd7525 100644
--- a/bar.txt
+++ b/bar.txt
@@ -0,0 +1 @@
+Bar
diff --git a/baz.txt b/baz.txt
index e69de29..a688182 100644
--- a/baz.txt
+++ b/baz.txt
@@ -0,0 +1 @@
+Baz
diff --git a/foo.txt b/foo.txt
index e69de29..bc56c4d 100644
--- a/foo.txt
+++ b/foo.txt
@@ -0,0 +1 @@
+Foo

现在使用 bcompare 我得到以下信息:

[Feb-09 18:38][exampleForStackOverflow]$ git difftool --dir-diff

这显然不是预期的行为。文件未对齐,因此看不到差异


我在跑步:

[Feb-09 18:44][exampleForStackOverflow]$ git --version
git version 2.7.1

[Feb-09 18:44][exampleForStackOverflow]$ cat /etc/redhat-release 
CentOS release 6.6 (Final)

无可比拟:Version 4.1.3 (build 20814)

git 配置:

[Feb-09 18:45][exampleForStackOverflow]$ git config --list
color.ui=true
user.name=FOO
user.email=BAR@BAZ.com
log.decorate=full
diff.tool=bc3
difftool.bc3=trustExitCode
merge.tool=bc3
mergetool.bc3=trustExitCode
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true

问题:(来自Ismail Badawi)这与符号链接有什么关系?

回答:抱歉,屏幕截图不是很清晰,但右侧的文件是符号链接。见下文:

[Feb-09 18:52][exampleForStackOverflow]$ cd /tmp/git-difftool.RWDqE/right
[Feb-09 18:52][right]$ ll
total 0
lrwxrwxrwx 1 BAZ BAZ_g 54 Feb  9 18:51 bar.txt -> /home/BAZ/Desktop/exampleForStackOverflow/bar.txt
lrwxrwxrwx 1 BAZ BAZ_g 54 Feb  9 18:51 baz.txt -> /home/BAZ/Desktop/exampleForStackOverflow/baz.txt
lrwxrwxrwx 1 BAZ BAZ_g 54 Feb  9 18:51 foo.txt -> /home/BAZ/Desktop/exampleForStackOverflow/foo.txt

【问题讨论】:

  • 这与符号链接有什么关系?
  • @IsmailBadawi:更新

标签: git diff beyondcompare


【解决方案1】:

除了 Sixtyfootersdude 的建议之外,另一种选择是让 Beyond Compare 跟随符号链接。这会将符号链接与同名文件对齐。

文件夹比较中,点击规则工具栏按钮(裁判图标)。 转到处理标签。 勾选跟随符号链接

要使其影响所有新会话,请在单击“确定”之前将对话框底部的下拉列表从仅用于此视图更改为同时更新会话默认值


快照:

【讨论】:

  • 不错。我更喜欢这个解决方案。我在 Bcompare 中寻找此选项,但找不到。 既然你为 scooter 工作:为什么顶部菜单中没有“规则”按钮?也许在工具下?
  • 从 Windows 或 Linux 的顶部菜单中,打开 Session > Session Settings,然后转到 Comparison 选项卡以到达与规则工具栏按钮。在 Mac 上,菜单项是 Beyond Compare > Session Settings
  • 谢谢!如果您想要所有更改文件的简单列表,请记住选择“忽略文件夹结构”。
【解决方案2】:

使用它会起作用:

git difftool --dir-diff --no-symlinks

来自git doc

--[no-]符号链接

git difftool 的默认行为是创建指向工作树的符号链接 在 --dir-diff 模式和比较的右侧运行时 产生与工作树中的文件相同的内容。

指定 --no-symlinks 指示 git difftool 创建副本 反而。 --no-symlinks 是 Windows 上的默认设置。

【讨论】:

  • 这很适合查看差异。但请注意,此方法不允许您编辑文件(因为它们只是临时副本)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
  • 2017-02-06
相关资源
最近更新 更多