Каков опыт людей с любым из модулей Git для Python? (Я знаю о GitPython, PyGit и Dulwich - не стесняйтесь упоминать других, если вы знаете о них.)
Я пишу программу, которая должна взаимодействовать (добавлять, удалять, фиксировать) с Git-репозиторием, но не иметь опыта работы с Git, поэтому одна из вещей, которые я ищу, - это простота использования / понимания в отношении Git.
Другие вещи, которые меня в первую очередь интересуют: зрелость и полнота библиотеки, разумное отсутствие ошибок, постоянное развитие и полезность документации и разработчиков.
Если вы думаете о чем-то еще, что я хотел бы / нужно знать, пожалуйста, не стесняйтесь упоминать об этом.
Ответы:
Хотя этот вопрос был задан некоторое время назад, и я не знаю состояния библиотек на тот момент, стоит отметить, что поисковики GitPython отлично справляются с абстракцией инструментов командной строки, так что вам не нужно использовать подпроцесс. Есть несколько полезных встроенных абстракций, которые вы можете использовать, но для всего остального вы можете делать такие вещи, как:
Все остальное в GitPython просто облегчает навигацию. Я довольно доволен этой библиотекой и понимаю, что она является оберткой для базовых инструментов git.
ОБНОВЛЕНИЕ : я перешел на использование модуля sh не только для git, но и для большинства утилит командной строки, которые мне нужны в python. Чтобы повторить вышеизложенное, я бы сделал это вместо этого:
источник
repo.git.branch(b=somebranch)
работает, ноrepo.git.branch(D=somebranch)
не работает , поскольку пробел отсутствует). Я предполагаю, что сам реализую основную функцию на основе подпроцесса. Мне грустно, у меня были большие надежды. : - /git = sh.git.bake(_cwd=repopath)
. это работает потрясающе.Я думал, что отвечу на свой вопрос, так как я иду по другому пути, чем предлагалось в ответах. Тем не менее, спасибо тем, кто ответил.
Во-первых, краткий обзор моего опыта работы с GitPython, PyGit и Dulwich:
Кроме того, StGit выглядит интересно, но мне нужно, чтобы функциональность была выделена в отдельный модуль, и я не хочу ждать, пока это произойдет прямо сейчас.
За (намного) меньше времени, чем я потратил, пытаясь заставить работать три вышеупомянутых модуля, мне удалось заставить команды git работать через модуль подпроцесса, например
Это еще не полностью включено в мою программу, но я не предвижу проблему, кроме, возможно, скорости (так как я буду обрабатывать сотни или даже тысячи файлов за раз).
Возможно, у меня просто не хватило терпения наладить дела с Далвичем или GitPython. Тем не менее, я надеюсь, что модули получат больше развития и будут более полезными в ближайшее время.
источник
Я бы порекомендовал pygit2 - он использует отличные привязки libgit2
источник
pygit2
действительно полезная библиотека, и я с нетерпением жду ее расширения в будущем!libgit
иpygit2
, принимая источник из GitHub. Проблема в том, что в головных ветках были сломаны тесты, а последняя «стабильная» неудачная установка ... Не подходит, если важна надежность и вам нужно развертывать в различных средах ... :(Это довольно старый вопрос, и, когда я искал библиотеки Git, я нашел один, созданный в этом году (2013), который называется Gittle .
Это отлично сработало для меня (где другие, которые я пробовал, были нестабильны) и, кажется, покрывает большинство общих действий.
Некоторые примеры из README:
источник
git add other1.txt other2.txt
чтобы он не соответствовал ожидаемому.Возможно, это помогает, но Bazaar и Mercurial используют dulwich для своей совместимости с Git.
Далвич, вероятно, отличается от других в том смысле, что это повторная реализация git в python. Другой может быть просто оберткой вокруг команд Git (так что это может быть проще в использовании с точки зрения высокого уровня: commit / add / delete), это, вероятно, означает, что их API очень близок к командной строке git, поэтому вам понадобится получить опыт работы с Git.
источник
Для полноты http://github.com/alex/pyvcs/ это уровень абстракции для всех dvcs. Он использует Далвич, но обеспечивает взаимодействие с другими DVC.
источник
Обновленный ответ, отражающий изменившиеся времена:
GitPython в настоящее время является самым простым в использовании. Он поддерживает перенос многих команд git plumbing и имеет подключаемую базу данных объектов (dulwich является одной из них), и, если команда не реализована, предоставляет легкий API-интерфейс для обработки командной строки. Например:
Это вызывает:
Дульвич тоже хороший, но гораздо более низкий уровень. Это немного болезненно, потому что требует работы с объектами git на уровне сантехники и не имеет хорошего фарфора, который вы обычно хотели бы делать. Однако, если вы планируете модифицировать какие-либо части git или использовать git-receive-pack и git-upload-pack, вам нужно использовать dulwich.
источник
Вот очень быстрая реализация «git status»:
источник
git status
git status --short
был бы легче, и я думаю, что--short
результат будет меньше изменяться.git status --porcelain
для этого--porcelain: Give the output in a stable, easy-to-parse format for scripts...
--z
вместо--porcelain
. В отличие от--porcelain
,--z
не избегает имен файлов.Ответ PTBNL совершенно идеален для меня. Я делаю немного больше для пользователя Windows.
источник
Часть библиотеки Git Interaction в StGit на самом деле довольно хороша. Тем не менее, он не разбит на отдельные пакеты, но если есть достаточный интерес, я уверен, что это можно исправить.
Он имеет очень хорошие абстракции для представления коммитов, деревьев и т. Д., А также для создания новых коммитов и деревьев.
источник
Напомним, что ни одна из вышеупомянутых библиотек Git Python, похоже, не содержит эквивалента «git status», что на самом деле является единственной вещью, которую я хотел бы получить, поскольку иметь дело с остальными командами git с помощью подпроцесса.
источник