【问题标题】:How do you make git diff use gitx --diff on OS X你如何让 git diff 在 OS X 上使用 gitx --diff
【发布时间】:2009-04-10 06:56:13
【问题描述】:

Gitx 有一个很棒的 diff 查看器,我如何让 git 自动将 git diff whatever 导入 gitx?

我尝试将 git config diff.external 设置为如下所示的 shell 脚本:

git diff "$2" "$5" | gitx

但是,这只会将所有单个文件打开到多个 gitx 窗口中,并且确实会弄乱文件名(将它们全部更改为具有疯狂名称的 tmp 文件)。

谁有更好的解决方案?

【问题讨论】:

    标签: git macos diff


    【解决方案1】:

    就像 sigjuice 在上面说的一样。只有那些菜鸟(就像我现在一样)需要知道如何“连接” git 来使用它。这就是我所做的

    echo 'opendiff $2 $5' > ~/opendiff-git.sh
    chmod a+x ~/opendiff-git.sh
    git config --global diff.external ~/opendiff-git.sh 
    

    现在所有“git diff”都应该打开 FileMerge.app ...

    【讨论】:

    • opendiff "$2" "$5" -merge "$5" 适用于其中包含空格的路径。 ⌘-s 将 FileMerge 中的更改保存回本地文件。
    • 我将如何撤消此更改(如果说,我厌倦了 opendiff 并想回到内联差异工具)?
    • @威尔科尔:git config --global --unset diff.external
    【解决方案2】:

    我不太确定这是您想要的,但对于我们在 Mac 上的我们来说,无论如何它确实很方便并且有些相关,您可能想尝试一下:

    $ git difftool -t opendiff #hash

    这会在我觉得非常有用的 opendiff 程序中打开差异。这比创建一个 shell 脚本并通过新的外部差异强制所有差异要容易得多。如果您不在 Mac 上,您可能可以将 opendiff 更改为您最喜欢的可用 diff 工具...

    【讨论】:

    • 制作“git difftool…”(不带破折号)
    • 看起来你不能(-将 opendiff 更改为你最喜欢的可用 diff 工具...),-t mysupertool 导致 Unknown merge tool 'mysupertool'
    【解决方案3】:

    很抱歉,这并不能真正回答您关于 gitx 的问题。我什至不确定 gitx 是否可以用作通用差异工具。您可能喜欢 FileMerge,这是 Xcode 安装中包含的合并/差异工具。有一个名为 opendiff 的脚本可以为您启动它。只需制作一个包含以下行的脚本并将 diff.external 指向它。

    opendiff $2 $5
    

    【讨论】:

    • gitx 是一个很棒的通用 diff 工具
    【解决方案4】:

    我为 Araxis 合并做了这个,但无论你喜欢什么工具,修改这些基本指令都不难。

    首先我创建了 ~/bin/git-diff-driver.sh 并为该文件添加了执行权限。

    
    #!/bin/sh
    
    /usr/local/bin/compare -title1:"$1 (repo version)" -title2:"$1 " -max "$2" "$5"
    

    Araxis 将其命令行界面工具安装在 /usr/local/bin 中,比较工具是他们的通用工具,araxis* 工具通过比较提供。

    设置完成后,需要将以下几行添加到 ~/.gitconfig

    
    [merge]
        tool = araxismerge
    [mergetool "araxismerge"]
        cmd = "/usr/local/bin/compare -3 -merge -wait $LOCAL $BASE $REMOTE $MERGED"
        path = /usr/local/bin/
    [diff]
        external = "/Users/mark/bin/git-diff-driver.sh"
    

    这将通过 Araxis Merge 重定向所有 2 路和 3 路差异。似乎“path =”不是必需的,但它有效。

    祝你好运。

    【讨论】:

      【解决方案5】:

      我正在使用我命名为 git-diffx 的脚本并将其放入我的路径中:

      #!/bin/bash
      
      result=$(git diff $@)
      
      if [ "$result" ]; then
         echo "$result" | gitx
      fi
      

      然后你调用git diffx ...而不是git diff ...

      【讨论】:

        【解决方案6】:

        这个问题可能有点老了,但我刚刚找到了适合我的东西。

        打开 GitX 应用程序(v.7),选择“GitX”菜单,然后选择“启用终端使用”

        在终端管道 diff 到 gitx 通过:

        git 差异 | gitx

        【讨论】:

          【解决方案7】:

          不久前我问了similar question。该答案可能对您有所帮助。其中有几个问题,但其中一个与在 FileMerge 以外的其他工具中打开差异视图有关。

          【讨论】:

            猜你喜欢
            • 2011-06-18
            • 1970-01-01
            • 2010-11-20
            • 2011-07-02
            • 1970-01-01
            • 1970-01-01
            • 2012-09-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多