12

gitolite(非ルートインストール)で特定のリポジトリの受信後フックを作成する方法がわかりません

GIT_WORK_TREE=/path/htdocs git checkout -f私の裸のリポジトリには、更新時に作業ディレクトリをdocRoot()にコピーする必要があるWebサイトが含まれています

gitoliteの前は、特定のリポジトリのフックを更新するだけでした。
Gitoliteのドキュメントには、すべてのフックが必要であると記載されているhooks/commonため、どのように機能するのかわかりません。

フックの名前、配置場所、構造の変更方法(必要な場合)は何ですか?

4

2 に答える 2

8

2013年7月の更新:以下は、当時(2011年11月)にOPで使用されていたバージョンであるgitolite V2(または「g2」)用です。

2013年8月に最新のgitolite3.xで更新:公式の特定のリポジトリフックができました:

<repo.git>/hooks基本的には、内部のファイルを指すシンボリックリンクを作成するだけです$rc{LOCAL_CODE}/hooks/repo-specific(リポジトリを除くgitolite-admin) 。


フック伝播のドキュメントで詳しく説明されているように、すべてのフックはgitolite/hooks/commonGitoliteによって管理されるすべてのリポジトリに複製されます。 つまり、フックスクリプトは、そのフックを実行するリポジトリに応じて特定のアクションを実行する必要があります。

$GL_REPO変数(gitoliteが設定し、受け取ったgitコマンドのすべてのスクリプトに渡す)を使用することもできます。

または、ミラーリングフックのように、gitoliteサーバーに登録されているgit構成を使用することもできます。post-receive.mirrorpushフックを参照してください。

OPEyalRはコメントに次のように追加します。

しかし、それがどのように行われるのかはまだわかりません($GL_REPO更新するリポジトリを決定するために使用されることは理解していますが、実用的な部分がありません)。
で呼び出されたファイルを作成post-receive.testecho "test"、それを入れて$HOME/gitolite/hooks/common、実行しgl-setup、ワークステーションからプッシュを実行しました-何も起こりません( " test"出力なし)

私が答えたもの:

フックはhook、gitoliteサーバーのリポジトリのディレクトリにリンクとして表示され、にリンクします.gitolite/common/hook$HOME/.gitolite/common/hookではなく、にある必要があることに注意してください/gitolite

OPは、欠落しているドットが問題であったことを確認します。

フックを追加するプロセスについては、gitoliteでのフックの伝播、および「フックの使用」での使用法で詳しく説明されています。

于 2011-11-30T09:15:38.137 に答える
4

これは、gitoliteを使用している人にとってはかなり一般的なニーズであり、あまり上級のユーザーではない場合(少なくとも私にとっては)、ルーズエンドを結ぶのは少し難しいようです。

stackoverflowとgitoliteのリンクを前後にたどると、少し混乱する可能性があります。これらは私の結論であり、これを達成するために私がたどった道です。

@VonCが述べたように、バージョン3.5.3.1github link)以降、リポジトリ固有のフックの作成はすでに可能です。

ジトライトの更新/アップグレード

最初にすべきことは、gitoliteリポジトリを更新することです。したがって、 gitolite/home/git/gitoliteをホストしているサーバーにSSHで接続し、gitユーザー(通常)としてgitgitoliteがインストールされている場所(通常)に移動します。

例:

$ ssh myusername@devserver.com
$ sudo su - git
$ pwd
/home/git
$ cd gitolite

次に、 gitoliteをアップグレードする必要があります。そのためには、まず、gitoliteリポジトリを更新する必要があります

$ git pull

次に、インストールコマンドを繰り返す必要があります(前と同じ引数を使用していることを確認してください)

$ ./install

そして最後にセットアップを再度実行します。

$ gitolite setup

それが機能しない場合は、おそらくにgitolite実行可能ファイルを設定していないPATHので、次のようなことを行うことができます。

$ src/gitoliteセットアップ

Gitolite設定(「RC」ファイル)

これは私を最も混乱させた部分の1つでしたが、結局はかなり簡単でした。

有名な「rc」ファイルはgitのホームディレクトリにあり/home/git/.gitolite.rcます。と呼ばれる変数があることを確認してくださいLOCAL_CODE。そのファイルに次のようなものが表示されるはずです。そうでない場合は、追加してください。

LOCAL_CODE => "$ENV{HOME}/.gitolite/local"

また、「有効にする機能のコマンド」セクションで、それrepo-specific-hooksが使用可能であることを確認する必要があります。使用できない場合は、追加します。

ENABLE => [

    # COMMANDS

        # These are the commands enabled by default
        'help',
        'desc',
        'info',
        ...,
        ...,
        ...,
        'repo-specific-hooks'
        ...,
        ...,
        ...
]

ドキュメントへのリンクは次のとおりです

リポジトリ固有のフックの作成

最後に、ローカル gitolite-adminリポジトリで、変数にhooks/repo-specific設定したディレクトリの下に次のディレクトリを作成します。次に例を示します。LOCAL_CODE

gitolite_admin/local/hooks/repo-specific

その後、実際にフックスクリプトをその場所に追加し、ドキュメントに記載されているように、gitoliteconfファイルを介してそれらを管理できます。スクリプトが実行可能であることを確認してください。

repo foo
RW+                       =   @all
option hook.post-receive  =   deploy

繰り返しになりますが、これが皆さんのお役に立てば幸いです。

乾杯!

于 2014-03-15T00:09:19.537 に答える