Shell脚本检查git是否进行更改,然后循环更改文件?
我正在尝试编写一个执行以下操作的
shell脚本:
>检查远程git仓库是否有任何更改要拉. 通过我的研究,我发现了一些必要的命令来做这些事情,但是我没有能够让它们在shell脚本中一起工作. 这是一个脚本与我有一些命令: #!/bin/sh #Check if there are any changed files git --git-dir="/dir/.git" fetch origin if git --git-dir="/dir/.git" log HEAD..origin/master --oneline then #Output the modified files from the last pull git --git-dir="/dir/.git" diff --name-status ORIG_HEAD.. fi 我无法使用这个脚本中的命令的东西是: > if语句检查是否有更改或不总是为true.我已经尝试if语句与其他git命令,他们也总是真的.似乎git不像正常的shell命令那样得到0或1的响应.如何获得像这样的git命令或其他git命令在if语句中返回正确的响应? 如果我的脚本中的命令在这种情况下不会真的有效,那么做一个更好的方法呢? 编辑:当我循环访问更改的文件时,我应该更加清楚我需要从远程存储库中提取更改,然后再循环访问这些文件,以便在处理这些文件时,我有最新的更改.
对于您的第一个问题,您可以使用git diff –quiet(或git diff –exit-code),但通常当您使用它的退出代码时,您不希望打印输出,并且git diff –quiet意味着–exit-code)来确定是否有任何更改.如果有变化,那将给你一个1值,如果没有变化则为0.所以如果你想要有代码只有在有变化时才会运行:
if ! git --git-dir="/dir/.git" diff --quiet then # do stuff... fi 对于你的第二个问题,我会推荐一下read …循环来读取git diff-tree中的行: git --git-dir="/dir/.git" diff-tree ORIG_HEAD.. | while read srcmode dstmode srcsha dstsha status srcfile dstfile do # do something with $srcfile and $dstfile done 请注意,$srcmode将有一个额外的:在开头,如果文件被重命名$dstfile将只有一个值.如果您不想担心重命名,请传递–no-renames,而不是看到重命名,您将看到添加和删除. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |