PowerShell Git 传入和传出参数的差异
PowerShell Git diff passing from and to parameters
我创建了一个简单的 PowerShell 脚本来自动创建一个存档,其中包含在两个 git 标签之间修改的所有文件。
在我进行的几次测试中它似乎工作得很好,但今天一位同事抱怨说它没有添加特定文件。我开始调试它,我看到了一个非常奇怪的行为。
如您所见,我用来列出修改过的文件的命令是 git diff,传递我从 PowerShell 命令的参数(作为字符串)获得的来往标记。
param(
# Git tag or commit has from which we want the patch to start
[String] $FromTag,
# Path of the patch file
[String] $PatchFilePath,
# Git tag or commit hash where to we want the patch to update to (default HEAD, current checkout)
[String] $ToTag = "HEAD"
)
...
$modifiedFiles = git diff $FromTag..$ToTag --no-commit-id --name-only --diff-filter=ACMRT
...
测试了一下,果然文件不见了。我决定手动 运行 命令,如下所示:
git diff v041.3.2..v041.3.6 --no-commit-id --name-only --diff-filter=ACMRT
return编辑了文件...让我感到困惑。然后我尝试执行以下操作:
$FromTag = "v041.3.2"
$ToTag = "v041.3.6"
git diff $FromTag..$ToTag --no-commit-id --name-only --diff-filter=ACMRT
这不是 return 所有文件,而是其中的一部分。
然后我试着打电话给
git diff "v041.3.2".."v041.3.6" --no-commit-id --name-only --diff-filter=ACMRT
这给我的结果与变量完全相同,return仅修改了所有已修改文件的一个子集。
我已经尝试 运行 "DOS" 命令提示符中的最后一个命令来检查它是否是 git 问题,但它 return 是正确的一组文件。
当 PowerShell 将输入作为字符串传递时,git 解释输入的方式似乎有所不同,但我真的不明白为什么以及如何。
对于感兴趣的人,这是完整的脚本:https://gist.github.com/Gimly/b865b0ed09f0f9fe13d12f6b0137ecfb
运行 cmd /c echo $FromTag..$ToTag
来自 PowerShell,您会在第一个变量后看到 space:
v041.3.2 ..v041.3.6
使用双引号按原样将其作为一个参数传递(引号不会传递给程序):
git diff "$FromTag..$ToTag"
我创建了一个简单的 PowerShell 脚本来自动创建一个存档,其中包含在两个 git 标签之间修改的所有文件。
在我进行的几次测试中它似乎工作得很好,但今天一位同事抱怨说它没有添加特定文件。我开始调试它,我看到了一个非常奇怪的行为。
如您所见,我用来列出修改过的文件的命令是 git diff,传递我从 PowerShell 命令的参数(作为字符串)获得的来往标记。
param(
# Git tag or commit has from which we want the patch to start
[String] $FromTag,
# Path of the patch file
[String] $PatchFilePath,
# Git tag or commit hash where to we want the patch to update to (default HEAD, current checkout)
[String] $ToTag = "HEAD"
)
...
$modifiedFiles = git diff $FromTag..$ToTag --no-commit-id --name-only --diff-filter=ACMRT
...
测试了一下,果然文件不见了。我决定手动 运行 命令,如下所示:
git diff v041.3.2..v041.3.6 --no-commit-id --name-only --diff-filter=ACMRT
return编辑了文件...让我感到困惑。然后我尝试执行以下操作:
$FromTag = "v041.3.2"
$ToTag = "v041.3.6"
git diff $FromTag..$ToTag --no-commit-id --name-only --diff-filter=ACMRT
这不是 return 所有文件,而是其中的一部分。
然后我试着打电话给
git diff "v041.3.2".."v041.3.6" --no-commit-id --name-only --diff-filter=ACMRT
这给我的结果与变量完全相同,return仅修改了所有已修改文件的一个子集。
我已经尝试 运行 "DOS" 命令提示符中的最后一个命令来检查它是否是 git 问题,但它 return 是正确的一组文件。
当 PowerShell 将输入作为字符串传递时,git 解释输入的方式似乎有所不同,但我真的不明白为什么以及如何。
对于感兴趣的人,这是完整的脚本:https://gist.github.com/Gimly/b865b0ed09f0f9fe13d12f6b0137ecfb
运行 cmd /c echo $FromTag..$ToTag
来自 PowerShell,您会在第一个变量后看到 space:
v041.3.2 ..v041.3.6
使用双引号按原样将其作为一个参数传递(引号不会传递给程序):
git diff "$FromTag..$ToTag"