Git diff不适用于Windows绝对路径

时间:2017-08-10 15:44:07

标签: node.js windows git cygwin

我正在尝试使用git diff --quiet检查文件是否已经过修改(在节点中以编程方式),然后使用退出状态代码。

在Windows 7中工作,在我的cygwin shell中没有问题。退出状态代码是正确的:

$ git diff --quiet /cygdrive/c/git/foo/bar/Home.js
$ !ech
echo $?
1

但是当我在Cygwin shell中使用windows完整路径时,我错误地获得了退出0状态:

$ git diff --quiet "C:\\git\\foo\\bar\\Home.js"
$ echo $?
0

为什么这样,我如何使用绝对窗口路径并获得正确的退出状态代码?

UPDATE 我发现git diff根本不起作用/在使用Windows绝对路径时什么都不显示。如何在Windows绝对路径中使用git diff?

2 个答案:

答案 0 :(得分:0)

使用<link href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"/> <div class="container"> <div class='row'> <div class="col-xs-9"> <br>Hifgdfgsdfg <br>Hifgdfgsdfg <br>Hifgdfgsdfg <br>Hifgdfgsdfg <br> <br>Hifgdfgsdfg <br>Hifgdfgsdfg <br>Hifgdfgsdfg <br>Hifgdfgsdfg <br> <br>Hifgdfgsdfg </div> <div class="col-xs-3">Hifgdfgsdfg <br>Hifgdfgsdfg <br>Hifgdfgsdfg <br>Hifgdfgsdfg <br>Hifgdfgsdfg <br> <br>Hifgdfgsdfg </div> </div>转换Windows路径,然后再将其转换为git。

答案 1 :(得分:0)

  

我发现git diff根本不起作用/在使用Windows绝对路径时什么也不显示。如何在Windows绝对路径中使用git diff?

通过使用Git 2.20(2018年第四季度):事实证明,在某些情况下,Windows上的“ git diff D:/a/b/c D:/a/b/d”会删除路径中的初始部分,因为它们 不被认为是绝对的,已得到纠正。

请参见commit ffd04e9Johannes Sixt (j6t)(2018年10月19日)。
(由Junio C Hamano -- gitster --commit 99499e2中合并,2018年10月30日)

  

diff:请勿尝试从绝对Windows路径中删除前缀

     

git diff可以使用绝对路径调用。
  通常,这会触发--no-index情况。然后,绝对路径将保留在输出中打印的文件名中。

     

但是有一个特殊之处:当从存储库中的子目录调用该命令时,则会尝试从相对路径的开头剥离该子目录。
  但是,要检测相对路径,代码仅检查初始斜杠。
  这会将Windows样式路径(例如“ D:/base”误认为是相对路径)   输出看起来像这样,例如:

D:\dir\test\one>git -P diff --numstat D:\dir\base D:\dir\diff
1       1       ir/{base => diff}/1.txt
     

正确的输出应为:

D:\dir\test\one>git -P diff --numstat D:\dir\base D:\dir\diff
1       1       D:/dir/{base => diff}/1.txt
     

如果调用“ git diff”的子目录足够深,以致前缀变得比要打印的路径更长,则后续代码将超出范围访问该路径。

     

使用is_absolute_path()检测Windows样式的绝对路径。