Обновите Git-репозиторий через Git Hook в Python - PullRequest
2 голосов
/ 28 декабря 2011

Я использую python для написания ловушки после получения, которая, как мы надеемся, послужит для автоматического развертывания всех обновленных файлов в моем проекте.По сути, каждый раз, когда нажимается ветка «deploy», она загружает измененные файлы по 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: не git-репозиторий: '.'".

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

1 Ответ

0 голосов
/ 28 декабря 2011

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

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

...