私は Python を使用して post-receive フックを作成しています。これは、プロジェクト内の更新されたすべてのファイルの自動展開に役立つことを願っています。基本的に、「デプロイ」ブランチがプッシュされるたびに、変更されたファイルが FTP 経由でサーバーにアップロードされます。
これが私がこれまでに持っているものです:
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/
、このリポジトリのクローンである別のリポジトリをその下に置きます。
このコードでは、作業ディレクトリをそのリポジトリに変更してから、プルを開始しようとしています。ただし、これは機能しません。代わりに、プッシュしてフックを実行すると、「fatal: Not a git repository: '.'」というメッセージが表示されます。
このリポジトリに正常にプルして、そのファイルを他のサーバーにアップロードできるようにする方法についてのアイデアはありますか? 私が試したすべての方法は失敗しました。