You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

git diff比较仓库外文件时退出码不符合预期的问题咨询

Git Diff 比较仓库外文件的退出码问题

问题

  • 能否使用git diff比较代码仓库外的两个文件?
  • 如果可以,为何当文件存在差异时,程序的退出码仍为0(而非预期的1)?我忽略了什么?

cmd.exe 测试结果

9:43:55.45 2023-08-04  C:\src\t\scripts>TYPE .\t1.txt
this is t1.txt

 9:43:57.92 2023-08-04  C:\src\t\scripts>TYPE .\t2.txt
this is t2.txt

 9:43:57.94 2023-08-04  C:\src\t\scripts>"C:\Program Files\Git\cmd\git.exe" diff --exit-code --no-index  --ignore-all-space  --shortstat  .\t1.txt .\t1.txt

 9:43:58.04 2023-08-04  C:\src\t\scripts>ECHO %ERRORLEVEL%
0

 9:43:58.04 2023-08-04  C:\src\t\scripts>"C:\Program Files\Git\cmd\git.exe" diff --exit-code --no-index  --ignore-all-space  --shortstat  .\t1.txt .\t2.txt
 1 file changed, 1 insertion(+), 1 deletion(-)

 9:43:58.14 2023-08-04  C:\src\t\scripts>ECHO %ERRORLEVEL%
0

PowerShell 7.3.6 测试结果

PS C:\src\t\scripts> Get-Content -Path .\t1.txt
this is t1.txt
PS C:\src\t\scripts> Get-Content -Path  .\t2.txt
this is t2.txt
PS C:\src\t\scripts> & 'C:\Program Files\Git\cmd\git.exe' diff --exit-code --no-index  --ignore-all-space  --shortstat  .\t1.txt .\t1.txt
PS C:\src\t\scripts> $LASTEXITCODE
0
PS C:\src\t\scripts> & 'C:\Program Files\Git\cmd\git.exe' diff --exit-code --no-index  --ignore-all-space  --shortstat  .\t1.txt .\t2.txt
 1 file changed, 1 insertion(+), 1 deletion(-)
PS C:\src\t\scripts> $LASTEXITCODE
0
PS C:\src\t\scripts> & 'C:\Program Files\Git\cmd\git.exe' diff --exit-code --no-index  --ignore-all-space  --shortstat  .\t1.txt .\t1.txt
PS C:\src\t\scripts> $?
True
PS C:\src\t\scripts> & 'C:\Program Files\Git\cmd\git.exe' diff --exit-code --no-index  --ignore-all-space  --shortstat  .\t1.txt .\t2.txt
 1 file changed, 1 insertion(+), 1 deletion(-)
PS C:\src\t\scripts> $?
True

使用的 Git 版本

PS C:\src\t\scripts> git --version
git version 2.39.2.windows.1

Git Diff 官方文档说明

--exit-code
Make the program exit with codes similar to diff(1). That is,
it exits with 1 if there were differences and 0 means no differences.


验证 Git 可返回非零退出码

cmd.exe 测试

9:54:45.54 2023-08-04  C:\src\t\scripts>TYPE testgit.bat
@"C:\Program Files\Git\cmd\git.exe" >NUL
@ECHO %ERRORLEVEL%
 9:54:56.14 2023-08-04  C:\src\t\scripts>CALL testgit.bat
1

 9:54:58.82 2023-08-04  C:\src\t\scripts>testgit.bat
1

PowerShell 测试

PS C:\src\t\scripts> Get-Content -Path  .\testgit.ps1
& 'C:\Program Files\Git\cmd\git.exe' | Out-Null
$LASTEXITCODE
& 'C:\Program Files\Git\cmd\git.exe' | Out-Null
$?
PS C:\src\t\scripts> .\testgit.ps1
1
False

系统 Git 实例唯一性验证

PS C:\> Get-Command git -All

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Application     git.exe                                            2.39.2.1   C:\Program Files\Git\cmd\git.exe

内容的提问来源于stack exchange,提问作者lit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 03:07:03