我已经以便携方式使用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工具吗?如果是这样,相对于什么?
答案 0 :(得分:0)
Git不会尝试在工具路径中搜索/替换环境变量。因此,恐怕是不可能的。 使用相对路径也不起作用,因此您实际上应该使用以下方法之一。
提供的是您的设置:
可能的选项是:
.git/config
),您还可以在每个用户的配置中(在PC1上使用C:/Users/MY-USERNAME/.gitconfig
),并使用绝对路径。
这将具有采用DRY原则为所有存储库设置首选项的优势。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/
)。C:/Apps/BComp.exe
指向两种环境下正确的二进制文件,以便您可以在配置中对C:/Apps/BComp.exe
进行硬编码。方法2和方法3用于完整性或即席即用的解决方案。但实际上,您应该考虑第一个。