4

gitolite_admin を使用して特定のレポにフックをインストールする簡単な方法はあるのでしょうか。

ワークステーションに複製されたgitolite_adminレポを使用して、レポ素晴らしいための更新後のフックが必要だと想像してみましょう...

#conf/gitolite_conf
repo    awesome
        RW+     =   deployer

更新後の内容:

#!/bin/sh
echo "Post receive-hook => updating Redmine repository"
sudo -u deployer perl -we '`cd /home/deployer/repo/awesome.git && git fetch -q --all`'
4

3 に答える 3

3

「リポジトリ固有の環境変数」も確認できます

オプション構文の特別な形式を使用して、gitolite トリガーおよびインストールする可能性のある git フックに表示されるリポジトリ固有の環境変数を設定できます

たとえば、CI ジョブを開始する更新後フックをインストールしたとします。もちろん、デフォルトでは、このフックは gitolite が管理するすべてのリポジトリに対してアクティブになります。ただし、r1、r2、r4 などの特定のリポジトリに対してのみ実行する必要があります。

これを行うには、まずこれを に追加しますgitolite.conf

repo r1 r2 r4
    option ENV.CI = 1

これにより、トリガーまたはフックが呼び出される前に、値が 1 の GL_OPTION_CI という環境変数が作成されます。

注: オプション名は で始まりENV.、その後にアルファベット、数字、およびアンダースコア文字で構成される一連の文字が続く必要があります。

CI ジョブを実行するフックは、何をすべきかを簡単に決定できます。

# exit if $GL_OPTION_CI is not set
[ -z $GL_OPTION_CI ] && exit

... rest of CI job code as before ...

もちろん、反対のこともできます。つまり、リストされたリポジトリは CI ジョブを実行しないように決定しますが、他のすべてのリポジトリは次のようにする必要があります。

repo @all
    option ENV.CI = 1

repo r1 r2 r4
    option ENV.CI = ""

その機能はかなり最近のものです (コミット 999f9cd39で開始されましたが、この場合、 3.5.2 のコミット 63865a16 2013 年 6 月で完了しました)。
しかし、そのバージョンを持っていなくても、そのセクションの最後の部分で説明されているように、オプション変数を使用してこれを行う他の方法があります。

gitolite git-configこの機能が追加される前でも、次のように、フック コード内でコマンドを使用してリポジトリに設定されたオプションと構成をテストすることで、これを行うことができました。

if gitolite git-config -q reponame gitolite-options.option-name
then
    ...

また、同じ方法で git config 変数を使用できます。または、グループ メンバーシップを使用することもできます。詳細については、" " の関数 " "
に対するコメントを参照してください。in_groupEasy.pm

# in_group()

# return true if $ENV{GL_USER} is set and is in the given group

# shell equivalent
# if gitolite list-memberships $GL_USER | grep -x $GROUPNAME >/dev/null; then ...
于 2013-08-26T05:03:30.433 に答える
1

@VonCの回答を補完するためのステップバイステップの手順は次のとおりです

特定のリポジトリの gitolite フック

于 2014-03-15T00:13:29.057 に答える