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

Существует ли реализация Git в чистом Python?

Существует ли реализация Git в чистом Python?

4b9b3361

Ответ 1

Найдено Dulwich:

Дульвич - чистый питон реализация форматов файлов Gitи протоколы.

Проект назван в честь деревни в котором г-н и г-жа Git живут в Эскиз Монти Питона.

Похож на низкоуровневую библиотеку, API не казался мне дружелюбным, но есть руководство по странице Github

Ответ 2

"git" - это имя конкретного программного пакета, а не имя спецификации. Существует только один "git", и он в основном написан на C.

Если вы ищете интерфейс для изменения репозиториев git из программы Python, посмотрите GitPython.

Ответ 3

Я знаю, что этот вопрос довольно старый, но я просто подумал, что добавлю это для следующего парня. В принятом ответе упоминается Дульвич и упоминается, что он довольно низкоуровневый (и это тоже мое мнение). Я нашел gittle, который является оберткой высокого уровня вокруг Дульвича. Он довольно прост в использовании.

Установка

$ pip install gittle

Примеры (взяты из проекта README.md):

Клонировать хранилище

from gittle import Gittle

repo_path = '/tmp/gittle_bare'
repo_url = 'git://github.com/FriendCode/gittle.git'

repo = Gittle.clone(repo_url, repo_path)

Инициализировать репозиторий с пути

repo = Gittle.init(path)

Получить информацию о репозитории

# Get list of objects
repo.commits

# Get list of branches
repo.branches

# Get list of modified files (in current working directory)
repo.modified_files

# Get diff between latest commits
repo.diff('HEAD', 'HEAD~1')

Зафиксировать

# Stage single file
repo.stage('file.txt')

# Stage multiple files
repo.stage(['other1.txt', 'other2.txt'])

# Do the commit
repo.commit(name="Samy Pesse", email="[email protected]", message="This is a commit")

Выдвижные

repo = Gittle(repo_path, origin_uri=repo_url)

# Authentication with RSA private key
key_file = open('/Users/Me/keys/rsa/private_rsa')
repo.auth(pkey=key_file)

# Do pull
repo.pull()

Нажмите

repo = Gittle(repo_path, origin_uri=repo_url)

# Authentication with RSA private key
key_file = open('/Users/Me/keys/rsa/private_rsa')
repo.auth(pkey=key_file)

# Do push
repo.push()

Branch

# Create branch off master
repo.create_branch('dev', 'master')

# Checkout the branch
repo.switch_branch('dev')

# Create an empty branch (like 'git checkout --orphan')
repo.create_orphan_branch('NewBranchName')

# Print a list of branches
print(repo.branches)

# Remove a branch
repo.remove_branch('dev')

# Print a list of branches
print(repo.branches)

Это только части (снова вытащил из проекта README.md), который, я думаю, был бы наиболее распространенным случаем использования. Вы должны проверить проект самостоятельно, если вам нужно больше, чем это.