私はpythonを使ってプロジェクトの更新されたすべてのファイルを自動展開するためのうまく機能するpost-receiveフックを書いています。基本的に、「展開」ブランチがプッシュされるたびに、変更されたファイルがFTP経由で自分のサーバーにアップロードされます。PythonのGit Hookを使ってGitリポジトリを更新する
は、ここで私がこれまで持っているものです。
def deploy(old, new):
fileList = subprocess.Popen(['git', 'diff', '--name-only', old, new], stdout=subprocess.PIPE)
files = fileList.stdout.read().split('\n')[:-1]
# Switch to the regular repository and pull to it.
os.chdir("/home/git/testrepo")
subprocess.Popen(['git', 'pull'], cwd="/home/git/testrepo")
for file in files:
print file
for line in sys.stdin.xreadlines():
old, new, ref = line.strip().split(' ')
if ref == "refs/heads/deploy":
print "Deploying the new commits now."
deploy(old, new)
else:
print "No need to deploy."
このフックを含むリポジトリが裸のリポジトリです。私は/home/git/testrepo/
の下にこのリポジトリのクローンである別のリポジトリを持っています。
このコードでは、作業ディレクトリをそのリポジトリに変更してプルを開始しようとしています。しかし、これは機能しません。代わりに、プッシュしてフックを実行すると、次のメッセージが表示されます。 "致命的:gitリポジトリではない: '。" "
どのようにしてこのリポジトリに正常にプルすることができ、そのファイルを他のサーバーにアップロードすることができますか?私が試したすべての方法が失敗しました。
今のところ私はgitディレクトリに "git-dir"を引数としてgitコマンドを設定しています。しかし、私はまだ私の元の問題に実際の解決策を見つけることに興味があります。 – Serplat