当前位置:  开发笔记 > 运维 > 正文

程序化的git状态

如何解决《程序化的git状态》经验,为你挑选了1个好方法。

有没有人知道一个git管道(绝对不是瓷器)的方法来确定是否:

自上次提交以来,repo中有编辑,以及

当地HEAD是否领先于原产地/ HEAD

我希望以编程方式确定这个,因此不想用瓷器和各种sed-fu来解决这个问题.



1> VonC..:

更新:如下面提到的toupeira,您可以使用--porcelain的选项git的状态(因为犯6f15787,2009年9月,git的1.7.0).

我在答案中提到" 瓷器在Git中的含义是什么意思? ":

也许--porcelain这里的意思是"产生适合瓷器脚本消费的输出"

但是,这不会显示前面/后面的信息:请参阅" 添加到"git status --porcelain"以使其行为类似于"git status"? ":为此,您仍需要使用其他命令:请参阅" 如何知道git存储库是否存在未与服务器同步的更改? "


初步答复2009年3月

在瓷器命令中,a:

$ git diff HEAD

为您提供自上次提交以来的更改(如果您运行"git commit -a",您将提交的内容).

管道命令中可能的等价物是:

$ git ls-files -m

列出所有修改过的(工作目录或索引)文件


如果通过克隆其他人的存储库来创建存储库,则远程"主"分支将复制到名为"origin"的本地分支.您将获得自己的"主"分支,该分支与远程存储库无关.

总有一个当前的头,称为HEAD.(这实际上是一个符号链接,.git/HEAD,到refs/heads/master这样的文件.)

运行"git status"并分析输出:

# On branch master
# Your branch is ahead of 'origin/master' by 11 commits.
#

在SO问题中的更多细节" 为什么Git告诉我"你的分支在11次提交之前领先于'origin/master'."我如何让它停止? "

在管道命令中可能等效:

* git-for-each-ref

列出所有提交,但也需要分析输出...

同样,git ls-files可用于产生与git状态相同的结果.

git ls-files --exclude-per-directory=.gitignore --exclude-from=.git/info/exclude \
                    --others \
                    --modified \
                    -t


"git ls-files --exclude-standard ..."会更简单一些.
推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有