git:以编程方式测试索引是否脏

时间:2012-02-07 02:11:48

标签: git bash

我正在编写一个脚本来执行此操作:

#!/bin/bash
mysqldump -u user -p database > db_file
git add db_file
git commit -m 'db_file updated by script'

但是,如果运行此脚本时索引是脏的怎么办?也就是说,如果我已经git add编辑了我希望在此脚本运行时没有自动提交的文件,该怎么办?我能做到这一点:

#!/bin/bash
mysqldump -u user -p database > db_file
git stash
git add db_file
git commit -m 'db_file updated by script'
git stash apply

但现在的问题是,如果索引和工作树脏,那么git stash不会向存储列表添加任何内容,但git stash apply将错误地应用任何内容在藏匿之上并丢弃那个藏匿的历史。

如何根据索引是否为脏来生成bash条件?

2 个答案:

答案 0 :(得分:1)

git diff --cached --quiet

上一个回答:

git diff --cached将准确显示我想知道的内容。唯一的问题是无论如何返回值都是真的,因此很难有条件地做到这一点。如果没有更好的答案,那么我可以将输出转储到文件中并在文件为空时创建条件。但这听起来很痛苦。当然有更好的方法。

答案 1 :(得分:0)

您可以解析git status -s的输出。

if git status -s | grep -q '^.M'
then
    # ...
fi