最近、すべてのコミットが特定のチケットを参照するために、gitフックを作成する必要がありました。
私は学び始める場所を望んでいました。 pro gitbookの内容はすべてRubyで書かれています。 Rubyは私の強みではないので、他の言語で書かれたgitフックに関するチュートリアルを誰かが共有できますか?(特にPythonまたはBashスクリプトが好きです。)
Here は、フックにPythonを使用する例です。一般に、フックは言語に依存しません。スクリプトを使用して、作業を行うか、0 /で終了します。 gitプロセスのフローを変更するための他の戻りコード。
Gitに付属する例は、シェルスクリプトで記述されています。各リポジトリの.git/hooks
にはいくつかの基本的なものがあり、/usr/share/doc/git-core/contrib/hooks
にインストールされているより高度なものがあります。
$ man githooks
を介して利用できるさまざまなフックに関する詳細情報もあります。
Pythonでgitフックを書くのは簡単だとわかりました。これは、Pythonの受信後フックの例です。提供されている例では、マスターと開発をデプロイします異なるフォルダー内のブランチ(マスターの変更は本番Webサイトにプッシュされ、開発ブランチの変更はqaサイトにプッシュされます)
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#post-receive
import sys
import subprocess
# 1. Read STDIN (Format: "from_commit to_commit branch_name")
(old, new, branch) = sys.stdin.read().split()
# 2. Only deploy if master branch was pushed
if branch == 'refs/heads/master':
subprocess.call('date >> ~/prod-deployment.log', Shell=True)
subprocess.call('GIT_WORK_TREE=/home/ft/app.prod git checkout master -f', Shell=True)
subprocess.call('cd ../../app.prod;bower update', Shell=True)
#3. Only deploy if develop branch was pushed
if branch == 'refs/heads/develop':
subprocess.call('date >> ~/dev-deployment.log', Shell=True)
subprocess.call('GIT_WORK_TREE=/home/ft/app.dev git checkout develop -f', Shell=True)
subprocess.call('cd ../../app.dev;bower update', Shell=True)