2011-12-27 4 views
2

Я использую python для написания крюка post-receive, который, мы надеемся, послужит для автоматического развертывания всех обновленных файлов в моем проекте. По существу, каждый раз, когда разворачивается ветвь «развернуть», он загружает измененные файлы по FTP на мой сервер.Обновление репозитория Git через Git Hook в Python

Вот что я до сих пор:

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/, который является клоном этого репозитория.

В этом коде я пытаюсь изменить свой рабочий каталог в этот репозиторий, а затем инициировать pull. Это, однако, не работает. Вместо этого я получаю следующее сообщение, когда я нажимаю, и выполняется хук: «fatal: не репозиторий git:.».

Любые идеи о том, как я могу успешно добраться до этого репозитория, чтобы затем загрузить его файлы на другой сервер? Каждый метод, который я пробовал, потерпел неудачу.

+0

На данный момент я работаю, установив каталог git с помощью «--git-dir» в качестве аргумента для всех моих команд git. Тем не менее, мне все еще интересно найти фактическое решение моей первоначальной проблемы. – Serplat

ответ

0

git diff ... терпит неудачу, потому что не знает, что вы находитесь внутри голого репо.

Попробуйте установить git --bare diff ... или установить $GIT_DIR.

+0

'git diff ...' работает отлично. Это попытка, которая не работает должным образом, хотя я пытался изменить рабочий каталог на обычный репозиторий. – Serplat

+1

Ну, это может быть вызвано установкой '$ GIT_DIR' перед запуском hook. Таким образом, я предполагаю, что «git pull» будет использовать текущее значение '$ GIT_DIR', которое было бы неверным. Установка этого параметра перед выполнением 'pull' или использованием' --git-dir' (как вы сказали) исправит. Я не проверял это, так что может быть неправильно снова :-) – m0tive

+0

Это звучит разумно. Возможно, вы правы на этом. – Serplat

 Смежные вопросы

  • Нет связанных вопросов^_^