Git commit из python - PullRequest
       1

Git commit из python

9 голосов
/ 19 августа 2011

Я хочу написать модуль на python (это учебный проект), чтобы улучшить мой опыт работы с git. Существует ли модуль python для различных команд git? По крайней мере, основные (commit / diff / log / add)?

Я видел GitPython , но я не смог найти поддержку (новых) коммитов; это скорее среда просмотра репо, чем полноценный интерфейс GIT. (Или я что-то пропустил?)

Кроме того, если для всего этого есть модуль python, будет ли это предпочтительным, или выполнение команд оболочки из кода python?

Ответы [ 3 ]

13 голосов
/ 19 августа 2011
10 голосов
/ 19 августа 2011

Git состоит из «сантехники» и «фарфора».Сантехнические компоненты составляют основу низкоуровневой системы: управление объектами, хранилищами, удаленными устройствами и т. Д.Фарфор, с другой стороны, означает более удобные для пользователя высокоуровневые инструменты, использующие сантехнику.

Исторически в C были реализованы только самые основные / критически важные для работы детали (в основном, сантехника), остальные использовалисьсценарии оболочки / perl.Чтобы быть более переносимым, все больше и больше кода было переписано на C.

На этом фоне я бы порекомендовал просто использовать системные вызовы исполняемого файла git для переноса на python.Рассматривайте ваш код как часть фарфора Git.По сравнению с использованием специализированной библиотеки:

PRO

  • Не нужно изучать API - используйте команды git, с которыми вы знакомы
  • Полный набор инструментов - вы можете использовать фарфор и не ограничиваться низкоуровневой функциональностью

CONTRA

  • Необходимо разобратьвывод командной строки из git вызовов.
  • Может быть медленнее
3 голосов
/ 11 мая 2018

Я думаю, что некоторые источники на python могут помочь начинающим, таким как я, не тратить драгоценное время на копание документов.

Все коммиты перейдут на только что созданный origin master

Вот оно:

from git import Repo
import os

path = '/your/path/here'
if not os.path.exists(path):
    os.makedirs(path)

os.chdir(path)

repo = Repo.init(path).git

index = Repo.init(path).index

for x in xrange (1,10):
    fname = 'filename' + str(x)
    f.open(fname, 'wb+')
    f.write()
    f.close()
    repo.add(fname)

index.commit("initial commit")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...