Git:编程方式测试索引是否有更改

4
我正在撰写一份脚本,它将能够完成以下任务:
#!/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不会将任何内容添加到stash列表中,但 git stash apply 将错误地应用顶部的存储,并丢弃该存储的历史记录。

如何根据索引是否已修改来设置bash条件?

2个回答

1
你可以解析 git status -s 的输出。
if git status -s | grep -q '^.M'
then
    # ...
fi

4
如果其他人在之后查看这个问题,我认为https://dev59.com/M3E85IYBdhLWcg3wr1qx有一个更健壮的解决方案。 - Alexander Bird
这是可怕的hackish。Git提供了低级“管道”命令,正是为了避免你做类似于这样的事情。 - Andrew Marshall
2
@AndrewMarshall:建设性的评论应该建议一个替代方案。你会建议使用哪个管道命令? - Greg Hewgill
1
@VonCпјҡ...дәә们иҜҙGitзҡ„е‘Ҫд»ӨйӣҶдёҚдёҖиҮҙгҖӮжҲ‘ж— жі•жғіиұЎдёәд»Җд№ҲпјҒжҲ‘жғізҹҘйҒ“жҳҜеҗҰеҖјеҫ—еј•е…ҘдёҖдёӘиЎҘдёҒжқҘд»Ӣз»Қgit status --plumbingпјҢе…¶ж„Ҹд№үдёҺ--porcelainзӣёеҗҢпјҲ并ејғз”Ё--porcelainдҪҶдёҚеҲ йҷӨе®ғпјүгҖӮ - Greg Hewgill
@Greg:你有关于人们所谓的“一致性”方面的任何参考资料吗?因为我有很多参考资料指出相反的情况。包括最近的一个:http://www.saintsjd.com/2012/01/a-better-ui-for-git/(在谷歌搜索“git commands consistent”中的第一个结果...) - VonC
显示剩余6条评论

1

git diff --cached --quiet

之前的回答:

git diff --cached会显示我想知道的内容。唯一的问题是返回值无论如何都是true,所以很难根据它做出条件判断。如果没有更好的答案,那么我可以将输出转储到文件中,并根据文件是否为空来进行条件判断。但这听起来非常hack-ish。肯定有更好的方法。


5
这个命令是 git diff --cached --quiet,它的作用是比较暂存区和上一次提交的差异,并且不输出任何内容。 - Armand
--quiet: 禁用程序的所有输出。意味着 --exit-code。也就是说,如果有差异,则退出并返回 1,表示有差异;如果没有差异,则返回 0。文档 - luckydonald

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接