加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Shell脚本检查git是否进行更改,然后循环更改文件?

发布时间:2020-12-16 01:37:10 所属栏目:安全 来源:网络整理
导读:我正在尝试编写一个执行以下操作的 shell脚本: 检查远程git仓库是否有任何更改要拉. 如果远程git存储库中有更改,请拉这些更改. 循环通过新的或已被修改的文件. 通过我的研究,我发现了一些必要的命令来做这些事情,但是我没有能够让它们在shell脚本中一起工作
我正在尝试编写一个执行以下操作的 shell脚本:

>检查远程git仓库是否有任何更改要拉.
>如果远程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语句中返回正确的响应?
>如何从命令中分配变量输出以将更改的文件查看为数组,以便我可以使用a循环遍历它们?

如果我的脚本中的命令在这种情况下不会真的有效,那么做一个更好的方法呢?

编辑:当我循环访问更改的文件时,我应该更加清楚我需要从远程存储库中提取更改,然后再循环访问这些文件,以便在处理这些文件时,我有最新的更改.

对于您的第一个问题,您可以使用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,而不是看到重命名,您将看到添加和删除.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读