程序化的git状态

时间:2009-03-01 06:00:24

标签: git

有没有人知道git管道(绝对不是瓷器)确定是否:

  • 自上次提交以来,repo中有编辑,
  • 本地HEAD是否领先于原产地/ HEAD

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

2 个答案:

答案 0 :(得分:10)

更新:mentioned belowtoupeira,您可以使用git status--porcelain选项(自提交6f15787,2009年9月,git 1.7.0)。

我在答案“What does the term porcelain mean in Git?”中提到:

  

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

但是,这不会显示前置/后置信息:请参阅“What to add to “git status --porcelain” to make it behave like “git status”?”:为此,您仍需要使用其他命令:请参阅“{{3} }“


2009年3月的初步回答

在瓷器指挥中,a:

$ git diff HEAD

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

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

$ git ls-files -m

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


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

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

运行“git status”并分析输出:

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

SO问题“How to know if git repository has changes that have not been synchronized with server?

中的更多细节

在管道命令中可能等效:

* git-for-each-ref

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

再次,Why is Git telling me “Your branch is ahead of ‘origin/master’ by 11 commits.” and how do I get it to stop?

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

答案 1 :(得分:2)

git status现在有一个--porcelain参数用于编写脚本(以及用于机器解析的替代-z),这比git ls-files更好,它不显示文件已添加到索引中。