Git後のフックを受けない
-
22-09-2019 - |
質問
まだgit、中央のレポ-レートを使用Gitosis).私の後を受けフックをメールでの機器メーリングリストを随時変更された中央のレポ-レートを、ドキュメンテーションのフォルダーのgitレポ-レート.
そのため、イン~git/私のディレクトリまで'a'を含むクローンのgitレポ-レート.のポストを受けフック次のように記述されています。
#!/bin/bash
cd ~git/repositories/a.git
. ~git/post-receive-email &> /dev/null
( cd ~git/a && git pull &> ~git/pull_log.log && php ~git/a/scripts/generate_markdown_documentation.php &> ~git/doc_log.log )
メールスクリプトは、その文書の世代がいません。のコンテンツのpull_log.ログ:
fatal: Not a git repository: '.'
を野外で見られるようになり、正しいディレクトリ線の5以上を記述します。私が悪いのでしょうか。どのように取得します。
編集: 更新しましたの後を受けフックが示唆されるようにします。スクリプトには:
#!/bin/bash
function die {
echo "$*" >&2; exit 1
}
function checkgit {
[ -d "$1/.git" ] || die "$1 could not possibly be a git repo; $1/.git is not a dir"
}
cd ~git/repositories/a.git
. ~git/post-receive-email &> /dev/null
( set -x
checkgit ~git/a
cd ~git/a
checkgit .
pwd
git pull
php ~git/a/scripts/generate_markdown_documentation.php )
んが、例えば以下のような写真から出力さgit push:
+ checkgit /var/git/a
+ '[' -d /var/git/a/.git ']'
+ cd /var/git/a
+ checkgit .
+ '[' -d ./.git ']'
+ pwd
/var/git/a
+ git pull
fatal: Not a git repository: '.'
+ php /var/git/a/scripts/generate_markdown_documentation.php
あすか?
ある場合スクリプトを実行しますが、自分のいいですよ"ということをフック/ポストを受け)
発見された問題は、 serverfault --基本的には、環境変数 GIT_DIR
や GIT_WORK_TREE
した時に設定フック、およびこれらの影響git引当.アンセットを禁止、変数の修正の問題です。
解決
必要なものより診断、例えば、
function die {
echo "$*" >&2; exit 1
}
function checkgit {
[ -d "$1/.git" ] || die "$1 could not possibly be a git repo; $1/.git is not a dir"
}
この点は、独立したサブシェルで直後に括弧を試すことができますもののように
set -x # show exactly what's executed (writes to stderr)
checkgit ~git/a
cd ~git/a && checkgit . && git pull ...
すものと考え替のstderrに独立したサブシェルでは、例えば、
( ... ) 2>/tmp/mydiagnosis$$.log
(この時限措置とはOKだけであれば、機密情報のログダウンロード)
OKシラスは、追加の情報を規定する外部からの不正アクぎこちない方も可能です。私は終わっ git
福があると思う試み:
- 入
~git/a
および合いなかったということではないかgit pull
ます。これに失敗します。 - 乗り込み
~git/a
走git status
.これも失敗します。っていることを確認してください、git
でいただくことを非常に悪いエラーメッセージを表示します。
である場合の手順に失敗すると、 ~git/a
ではないクローンだと思っています。名前を変更できますので、新しいクローンは、できるかどうかの問題に直面しています。
場合、最初のステップが成功し、その後も不思議では、私は戸惑.
場合、最初のステップに失敗したものが成功すると、ある問題と支店:
もrepo
~git/a
設定の間違った支店、レポニーズの支店ません。試git branch -a
見された場合にかかわらず不測の事態が発生.おそらくの支店では適切に関連するリモートリポジトリこの時点で潜る
~git/a/.git/config
, 、などのように説明していくかという見つけることを期待することである。ることが必要になります 実 gitの専門家;私が選ん。
他のヒント
私は最近、同様の問題に走ったと私はそれがそのgitのセットは、具体的に$ GIT_DIR変数環境変数に関連していると思います。あなたがそのセットを持っている場合は、他のリポジトリ上のすべてのgitコマンドが変なふうに行動し始めます。基本的に私は、私はまだそれを行う方法を考え出したていないのにフックの内側にあなたのgitのプルを実行すると、gitの混乱にそれらの奇妙な変数とリードを持っていない中立シェル環境で呼び出されなければならないと思います。
unset GIT_DIR
あなたが見ている致命的なエラーのために機能するソリューションです。
これはその中のgitコマンドを使用してフックのすべてのスクリプト(更新後は、他の一般的なものである)、に適用されます。 gitのコマンドではなく、障害者のENVからGIT_DIRを使用します。
さらなる説明については、 https://stackoverflow.com/a/4100577 のを参照してください。