27

最近、すべてのコミットが特定のチケットを参照するように、git フックを作成する必要がありました。

学びのスタート地点になればと思っていました。pro git book の内容はすべて Ruby で書かれています。Ruby は私の得意分野ではないので、他の言語で書かれた git フックに関するチュートリアルを共有できる人はいますか? (私は特に Python または Bash スクリプトを好みます。)

4

3 に答える 3

24

フックに Python を使用する例を次に示します一般に、フックは言語に依存しません。スクリプトを使用して何らかの作業を行うか、0/other のリターン コードで終了して git プロセスのフローを変更します。

于 2010-07-22T18:10:53.793 に答える
8

gitに付属する例は、シェルスクリプトで記述されています。各リポジトリにはいくつかの基本的なものがあり、.git/hooksにインストールされているより高度なものがあり/usr/share/doc/git-core/contrib/hooksます。

を介して利用できるさまざまなフックに関する詳細情報もあります$ man githooks

于 2010-07-22T18:35:45.240 に答える
5

Python で git hook を書くのは簡単だということがわかりました。Python での post-receive フックの例です。提供された例では、マスター ブランチと開発ブランチが異なるフォルダーにデプロイされます(マスターの変更は運用 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)                         
于 2014-07-23T15:05:56.723 に答える