Команда git archive --remote с использованием GitPython

Как я могу использовать команду (git archive --remote) с помощью GitPython? Согласно документам GitPython, мы можем использовать git напрямую. Я делаю что-то вроде:

git = repo.git git.archive(remote= 'http://path')

Но получая сообщение об ошибке «Исключение: Cmd ('git') не удалось из-за: код выхода (1)»

Есть ли какой-нибудь пример, на который я могу посмотреть, чтобы выполнить git archive --remote в скрипте python?

Спасибо


person HCH    schedule 26.06.2018    source источник


Ответы (1)


Этот вопрос довольно старый, но я столкнулся с той же проблемой, поэтому вот мое решение:

import git
import shutil

url = 'ssh://url-to.my/repo.git'
remote_ref = 'master'
tmprepo = 'temprepo'
tarball = 'contents.tar'

try:
    repo = git.Repo.init(tmprepo)
    repo.create_remote('origin', url)
    repo.remote().fetch(remote_ref)

    with open(tarball, 'wb') as f:
        repo.archive(f, f'remotes/origin/{remote_ref}', path=None)
    print('Success')
finally:
    shutil.rmtree(tmprepo)

Несколько заметок:

  • Это решение создает временный репозиторий, извлекает запрошенную удаленную ссылку и архивирует ее. В идеале нам не нужно было бы делать все эти дополнительные шаги, но я не смог найти лучшего решения. Пожалуйста, предложите улучшения!
  • Установите параметр path на что-то значимое, если вы хотите включить только подмножество каталога.
  • Поскольку нам вообще не нужна история, вероятно, вызов fetch() можно оптимизировать. Здесь могут помочь **kwargs полученные функциями (см. man git-fetch)
person andreee    schedule 21.05.2021