Подтвердить что ты не робот

Написание Git крючков в сценариях python/bash

Мне недавно нужно было написать git hooks, потому что все коммиты ссылаются на конкретный билет.

Я надеялся, что вы начнете учиться. Все материалы в книге pro git написаны на Ruby. Поскольку Ruby не мой сильный костюм, может ли кто-нибудь поделиться учебниками о крючках git, написанных на других языках? (Я бы предпочел сценарии Python или Bash).

4b9b3361

Ответ 1

Здесь приведен пример использования Python для подключения. В общем, крючки являются языковыми агностиками. Вы используете script для выполнения некоторой работы или для выхода с кодом возврата 0/другой, чтобы изменить поток процесса git.

Ответ 2

Примеры, которые поставляются с git, записываются в оболочку script; в .git/hooks есть несколько базовых элементов для каждого репо и более продвинутых, установленных на /usr/share/doc/git-core/contrib/hooks.

Там также больше информации о различных крючках, доступных через $ man githooks.

Ответ 3

Я узнал, что легко писать git hook на python. Это пример post-receive hook на python. Приведенный пример разворачивает мастер и развивает ветки в разных папках (изменения в master будут перенесены на производственный сайт, а изменения в ветке разработки будут перенесены на сайт 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)