gitconfig中diff / merge工具的相对路径?

时间:2017-02-20 13:04:14

标签: git

我已经以便携方式使用Git命令行工具设置了一个Dropbox文件夹,并且在同一个Dropbox文件夹结构中我还有Beyond Compare 4,我喜欢用它来进行差异/合并。

但是,由于某些策略,我的计算机上此Dropbox文件夹的确切位置不同,所以我试图说服gitconfig使用我的Beyond Compare工具的相对路径。

这可能吗?

这是在Windows 10上,我认为它可能很重要。

这是文件夹结构:

Dropbox
  |
  +-- Tools
       |
       +-- git
       |    |
       |    +-- bin
       |    +-- mingw64
       |         |
       |         +-- etc (folder with gitconfig in it)
       +-- Beyond Compare 4
            |
            +-- bcomp.exe

这是我尝试添加到gitconfig文件中的内容:

[diff]
    tool = bc
[difftool "bc"]
    cmd = '../../../Beyond Compare 4/BComp.exe' \"$LOCAL\" \"$REMOTE\"

但是当我尝试使用它时,这是输出:

D:\Temp> git difftool test.txt

Viewing (1/1): 'test.txt'
Launch 'bc' [Y/n]?
/mingw64/libexec/git-core/git-mergetool--lib: line 124: ../../Beyond Compare 4/BComp.exe: No such file or directory
fatal: external diff died, stopping at test.txt

D:\Temp>

如果我将自己放在命令行的etc目录中并发出以下命令:

"..\..\..\Beyond Compare 4\bcomp.exe"

然后Beyond Compare开始,所以我猜相对路径与gitconfig / etc相关是正确的。

我尝试一次删除一级../并重试但在每种情况下都会得到相同的错误,因此该路径不是相对于mingw64或git目录。

我假设路径用于我的命令行当前所在的位置,这将是我的存储库。

另请注意,如果我指定bcomp.exe的完整且准确的路径,它可以很好地工作:

[difftool "bc"]
    cmd = 'C:/Users/MY-USERNAME/Dropbox/Tools/Beyond Compare 4/BComp.exe' \"$LOCAL\" \"$REMOTE\"

我还设置了一个%DROPBOX%环境变量,指向我的Dropbox文件夹的根目录,所以我尝试了这个:

[difftool "bc"]
    cmd = '%DROPBOX%/Tools/Beyond Compare 4/BComp.exe' \"$LOCAL\" \"$REMOTE\"

给我一​​个不同的错误消息,我认为环境变量在gitconfig中不合法,或者可能使用不同的语法:

/mingw64/libexec/git-core/git-mergetool--lib: line 124: fg: no job control

如果我尝试$DROPBOX而不是%DROPBOX%,我会回到上一条错误消息:

/mingw64/libexec/git-core/git-mergetool--lib: line 124: $DROPBOX/Tools/Beyond Compare 4/BComp.exe: No such file or directory
fatal: external diff died, stopping at a.txt

那么有可能说服git使用相对路径来找到diff工具吗?如果是这样,相对于什么?

1 个答案:

答案 0 :(得分:0)

Git不会尝试在工具路径中搜索/替换环境变量。因此,恐怕是不可能的。 使用相对路径也不起作用,因此您实际上应该使用以下方法之一。

提供的是您的设置:

  • 配置PC1:C:/ Users / MY-USERNAME / Dropbox / Tools / Beyond Compare 4 / BComp.exe
  • 配置PC2:D:/应用程序/ Dropbox /工具/超越比较 4 / BComp.exe

可能的选项是:

  1. (我的个人建议):除了共享git-config(在存储库中.git/config),您还可以在每个用户的配置中(在PC1上使用C:/Users/MY-USERNAME/.gitconfig),并使用绝对路径。 这将具有采用DRY原则为所有存储库设置首选项的优势。
  2. 您可能只拥有cmd = 'BComp.exe' \"$LOCAL\" \"$REMOTE\",并修改PATH环境变量以也保存BComp.exe的路径(在PC1上为C:/Users/MY-USERNAME/Dropbox/Tools/Beyond Compare 4/,在PC2上为D:/Applications/Dropbox/Tools/Beyond Compare 4/)。
  3. li>
  4. 使用Windows 10,您可以设置常见的符号链接,例如C:/Apps/BComp.exe指向两种环境下正确的二进制文件,以便您可以在配置中对C:/Apps/BComp.exe进行硬编码。

方法2和方法3用于完整性或即席即用的解决方案。但实际上,您应该考虑第一个。