问题 程序化的git状态


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

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

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


10739
2018-03-01 06:00


起源



答案:


更新:as 如以下所说的 通过 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

10
2018-03-01 09:51



那很棒。非常感谢。 - Paul Beckingham
“git ls-files --exclude-standard ...”会更简单一些。 - Jakub Narębski


答案:


更新:as 如以下所说的 通过 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

10
2018-03-01 09:51



那很棒。非常感谢。 - Paul Beckingham
“git ls-files --exclude-standard ...”会更简单一些。 - Jakub Narębski


git status 现在有一个 --porcelain 用于编写脚本的参数(以及替代方法) -z 对于机器解析而言,这是首选 git ls-files 它不显示添加到索引的文件。


2
2017-07-07 23:37



从 的文件 --porcelain:“以易于解析的格式为脚本提供输出。这类似于短输出,但在git版本中保持稳定,无论用户配置如何。”
从发布说明中不清楚何时发布 --porcelain 然而,国旗被添加了。
我找到了!我搜索了Git日志 git log --grep "--porcelain" --date-order,并且它们显示标志是在提交中添加的 6f15787181a163e158c6fee1d79085b97692ac2f 在2009年9月5日。顺便说一下, git tag --contains 6f15787 | sort -V | less显示在v1.7.0之前,它实际上并没有在稳定版本中发布 2010年2月12日。