首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gitconfig中diff/merge工具的相对路径?

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

Stack Overflow用户
提问于 2017-02-20 21:04:14
回答 1查看 460关注 0票数 1

我用Git命令行工具以一种可移植的方式设置了一个dropbox文件夹,在相同的dropbox文件夹结构中,我也有Beyond Compare 4,我喜欢用它来比较/合并。

然而,这个dropbox文件夹在我的电脑上的确切位置由于一些策略的不同而不同,所以我试图说服gitconfig使用我的Beyond Compare工具的相对路径。

这个是可能的吗?

这是在Windows10上,我想这可能很重要。

这是文件夹结构:

代码语言:javascript
复制
Dropbox
  |
  +-- Tools
       |
       +-- git
       |    |
       |    +-- bin
       |    +-- mingw64
       |         |
       |         +-- etc (folder with gitconfig in it)
       +-- Beyond Compare 4
            |
            +-- bcomp.exe

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

代码语言:javascript
复制
[diff]
    tool = bc
[difftool "bc"]
    cmd = '../../../Beyond Compare 4/BComp.exe' \"$LOCAL\" \"$REMOTE\"

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

代码语言:javascript
复制
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目录中,并发出以下命令:

代码语言:javascript
复制
"..\..\..\Beyond Compare 4\bcomp.exe"

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

我尝试一次删除一个级别的../,然后重试,但每种情况都得到相同的错误,因此路径也不是相对于mingw64或git目录。

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

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

代码语言:javascript
复制
[difftool "bc"]
    cmd = 'C:/Users/MY-USERNAME/Dropbox/Tools/Beyond Compare 4/BComp.exe' \"$LOCAL\" \"$REMOTE\"

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

代码语言:javascript
复制
[difftool "bc"]
    cmd = '%DROPBOX%/Tools/Beyond Compare 4/BComp.exe' \"$LOCAL\" \"$REMOTE\"

给了我一个不同的错误消息,我认为这意味着环境变量在gitconfig中是非法的,或者可能使用了不同的语法:

代码语言:javascript
复制
/mingw64/libexec/git-core/git-mergetool--lib: line 124: fg: no job control

如果我尝试使用$DROPBOX而不是%DROPBOX%,我将返回到前面的错误消息:

代码语言:javascript
复制
/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工具呢?如果是这样,相对于什么?

EN

回答 1

Stack Overflow用户

发布于 2020-02-10 20:54:05

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

假设这是您的设置:

应用程序配置PC1: C:/Users/MY-USERNAME/Dropbox/Tools/Beyond Compare

  • PC2: D:/Applications/Dropbox/Tools/Beyond Comp.exe

可能的选项包括:

  1. (我个人的建议):除了共享git-
  2. (存储库中的.git/config)之外,您还可以使用绝对路径设置每个用户的配置(PC1上的C:/Users/MY-USERNAME/.gitconfig)。这将具有为所有存储库设置首选项的优点,采用DRY principle.
  3. You可能只有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/ )。在使用Windows10的
  4. 中,您可能会设置一个通用的符号链接,例如在两种环境下都指向正确的二进制文件,这样您就可以在配置中对C:/Apps/BComp.exe进行硬编码。

方法2和3是为了完整性,或者说是开箱即用的解决方案。但实际上,你应该考虑第一个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42345352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档