Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何制作;git descripe";提及是否存在局部变化?_Git_Version_Revision - Fatal编程技术网

如何制作;git descripe";提及是否存在局部变化?

如何制作;git descripe";提及是否存在局部变化?,git,version,revision,Git,Version,Revision,如何在脚本中检查是否存在本地更改?如果没有本地更改,可能与git descripe结合使用?git status以非零状态退出 但我不明白“与git descripe结合”是什么意思。git diff--quiet返回退出状态1(如果有更改),0(如果没有更改) 请记住,它将显示阶段性更改和工作目录之间的差异。 如果您对HEAD和working dir之间的更改感兴趣,那么应该使用git diff HEAD--quiet --quiet意味着--exit code您需要确保满足以下两个属性: 头

如何在脚本中检查是否存在本地更改?如果没有本地更改,可能与git descripe结合使用?

git status
以非零状态退出

但我不明白“与git descripe结合”是什么意思。

git diff--quiet
返回退出状态1(如果有更改),0(如果没有更改)

请记住,它将显示阶段性更改和工作目录之间的差异。 如果您对HEAD和working dir之间的更改感兴趣,那么应该使用
git diff HEAD--quiet


--quiet
意味着
--exit code

您需要确保满足以下两个属性:

  • 头缓存和索引缓存之间没有区别

    git-diff-index——缓存头

  • 索引和工作树之间没有差异:

    git差异文件

  • 这两个命令都使用一个
    --quiet
    参数,该参数将根据是否存在差异来设置退出代码(从git 1.4之后的一段时间开始)。如果需要让它在Git1.4上工作,则需要在不使用
    --quiet
    的情况下运行命令,并检查它们是否产生任何输出

    注意:
    git diff
    是一个陶瓷命令,因此不应在脚本中使用。改为使用上面的管道命令

    示例shell代码,取自我的:

    如果您可以要求git版本>=1.5,
    如果git diff文件--quiet&&git diff索引--quiet--cached HEAD;然后
    可以替换上述比较


    注意:此解决方案(与Antony的interactive
    git diff HEAD——quiet
    )完全相同)只发现相对于HEAD的局部更改。然而,本地提交也可以被认为是本地更改,并且自然不会出现在任何与HEAD的差异中。您需要检查Sa1值<代码> Git描述< /C> >以检测头是否来自一组您认为不是本地更改的提交。

    < P>因为GIT1.66,<代码> Git描述已经接受了<代码> -脏< /代码>选项。如果您的工作树中有未提交的更改,那么您将得到如下输出:

    $ git describe --dirty
    1.0.2-2-g215081f-dirty
    

    v1.1-5-g1234567表示无局部变化,v1.1-5-g1234567(+)表示有局部变化。当存在未老化的本地更改时,git status在此处返回1。我发现此解决方案存在两个问题:a)
    git diff
    是陶瓷,git upstream强烈建议不要在脚本中使用陶瓷。b)
    git diff
    将忽略索引缓存中已有的任何未提交的更改。关于如何解决这些问题,请参见我在的回答。问题是如何找到局部变化
    git diff HEAD--quiet
    发现本地更改正是您建议的两个管道命令的结果。瓷器和管道之间的区别在这里并不是那么重要。git开发人员说要对脚本使用管道命令,所以我的脚本基于这些命令。至于本地更改,
    git diff HEAD--quiet
    在功能上当然与我的两个命令相当,但我仍然更喜欢git上游为脚本编写案例推荐的API。我不会把git开发人员的一般建议视为在脚本中如此严格地使用管道。除了在脚本中,我无法想象git-quiet的任何用途,这表明这个带有此选项的子命令是规则的一个例外。是的,在脚本中解析git diff(不带--quiet)的结果肯定容易出错。另请参阅我在“当心”上的评论:这只识别git已经跟踪的文件的更改!如果您的本地更改是一个新文件,而您还没有将其暂存,那么您将获得类似
    1.0.2-2-g215081f
    的输出,这与使用干净的树所获得的结果是无法区分的。
    $ git describe --dirty
    1.0.2-2-g215081f-dirty