Git:以编程方式检查是否有任何内容被转移
对于我正在编写的Git脚本,我希望有一种编程方式来检查是否存在任何问题。i、 e.如果任何事情都在上演,我想要一个积极的结果,如果没有上演,我想要一个消极的结果Git:以编程方式检查是否有任何内容被转移,git,Git,对于我正在编写的Git脚本,我希望有一种编程方式来检查是否存在任何问题。i、 e.如果任何事情都在上演,我想要一个积极的结果,如果没有上演,我想要一个消极的结果 奖励点:一种通过编程检查工作树中是否有任何新内容可以暂存的方法。命令(也在helppagegit status--help中解释)的短格式输出提供了一种可以通过编程方式使用的输出。从git状态--helphelppage(对于我的git版本2.8.1.windows.1,在“输出”部分页面底部的某个地方): 在短格式中,每个路径的状态显
奖励点:一种通过编程检查工作树中是否有任何新内容可以暂存的方法。命令(也在helppage
git status--help
中解释)的短格式输出提供了一种可以通过编程方式使用的输出。从git状态--help
helppage(对于我的git版本2.8.1.windows.1,在“输出”部分页面底部的某个地方):
在短格式中,每个路径的状态显示为XY路径1->路径2
其中,PATH1是头部中的路径,“->PATH2”部分仅在PATH1对应于索引/工作树中的不同路径(即文件重命名)时显示。XY是两个字母的状态代码 根据同一帮助页面: 对于存在合并冲突的路径,X和Y显示合并每一侧的修改状态。对于没有合并冲突的路径,X显示索引的状态,Y显示工作树的状态。对于未跟踪的路径,
XY
是?
。其他状态代码可解释如下:'
=未修改M
=已修改A
=已添加D
=已删除R
=重命名C
=复制的U
=已更新但未合并忽略的文件不会列出,除非--Ignored选项有效,在这种情况下,
XY
are代码>
还可以找到有关XY
值的所有信息。
通过使用git status-s
获得短格式。
所以
应该为您提供到目前为止已登场的所有条目。您可以将-c
标志添加到grep,以计算行数,而不是打印行数
额外好处:工作树中任何新的、尚未进行阶段性(仍未跟踪)的内容都应通过以下内容找到:
git status -s | grep "^??"
希望这有帮助
祝你好运 您正在寻找:
git diff --cached --quiet
(如果仍然需要输出,也可以将--quiet
替换为--exit code
)这基本上是一个实用的示例。我在一组存储库中循环运行类似的内容,以获得每个存储库中未提交文件的摘要
function ordered_count(){
#修改自https://superuser.com/a/529837/23156
#echo“$data”|有序计数-c foo-c条
awk-F'?-c''
开始{split(“$*”,pattern)}
{对于(i=2;模式[i];++i)if(匹配($0,模式[i]))++count[i]}
结束{(i=2;图案[i];++i)打印计数[i]}
'
}
#“$@”用于添加额外的参数,例如--important/path`
gitstatus=$(git status--short--untracked files=all--no-ahead-behind$@)
#阶段性变化
mapfile-t staged\u added\u remove\u changed<可能的重复项您可以使用各种标志来git diff
来测试什么是staged/可以staged。不太重复,因为这里没有提到--exit code
,这是违反直觉的。如果您希望为每个未跟踪的文件而不是新文件夹的摘要视图创建一行,附加——未跟踪的文件=所有。您还可以使用--no-ahead-behind
节省几个CPU周期,以跳过提交检查。
git diff --cached --quiet