我如何使用预推git钩来检查本地和远程分支之间的某些文件或目录是否不同?

问题描述 投票:0回答:1

...更具体地说,为什么我不能以编程方式获取文件?

我对编写git hook很陌生。如果自上次推送以来更改了配置文件,我希望能够执行操作X。我想到了两种方法:

1)从github获取相关文件并运行diff。

2)使用您在预推git钩子中免费获得的信息(自登录时看起来像这样)扫描自上次推送以来的提交历史记录,以了解文件是否存在:

Name of the remote to which the push is being done: origin
URL to which the push is being done: [email protected]:<me>/<myrepo>.git
local ref: refs/heads/<mybranch>
local sha1: c83288a9e0b2a5c9f7b1940360e052b2d4468222
remote ref: refs/heads/<mybranch>
remote sha1: 164c55a9af0abee06bc03e91e162301ebf2bb097

目前,我正在尝试(1),因为它对我来说更明显。我不确定如何使用该信息来检查所有提交是否对相关文件进行了更改。但是我被困住了,因为curl https://raw.githubusercontent.com/<repo-owner>/<repo>/docs-and-config/config/config.yml以及尝试在邮递员中使用GET命令都返回404-我会理解未授权,但找不到。如果我在浏览器中访问相同的URL,则可以访问它(并且GitHub为其附加了某种令牌)。

所以我有两个问题:

((1)为什么会发生这种情况,您能告诉我如何获取远程文件吗?(2)您对我如何完成此任务有更好的想法吗?

git github hook githooks
1个回答
1
投票

pre-push挂钩运行时,您的数据尚未推送到远程系统。因此,尝试获取没有从GitHub推送的数据(没有该数据)是行不通的。 GitHub给您一个404,因为它还不存在。

检查提交历史记录的方法2,将是此处的最佳方法。您可以尝试以下操作:

#!/bin/sh

while read lref loid rref roid
do
    if echo $roid | grep -qsE '^0+$'
    then
        # Do whatever you want with a new branch.
    elif echo $loid | grep -qsE '^0+$'
    then
        # Do whatever you want with a deleted branch.
    elif git diff --name-only $loid $roid | grep -qsF "MY-FILENAME-HERE"
    then
        # Do whatever you want to do if MY-FILENAME-HERE is present in the diff.
    else
        # Do whatever you want if the file is absent.
    fi
done
© www.soinside.com 2019 - 2024. All rights reserved.