我正在尝试使用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?
答案 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 ffd04e9的Johannes 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样式的绝对路径。