Вроде бы простая задача - написать скрипт, который, выдаст автора ветки в удаленном репозитории в git'е.
Какая питоновская библиотека подойдет для этого лучше? Если кто-то заморачивался такой же задачей и у него есть результат, прошу поделиться наработками.
Форум → Программирование → Python → python и работа с git
python и работа с git
-
-
12 июля 2018 г. 15:46, спустя 4 часа 42 минуты 32 секунды
Решил попробовать обойтить модулем subprocess, написал такой скрипт
import os, subprocess #клонируем репозиторий url = '[email protected]:folder1/folder2.git' subprocess.check_call(["git", "clone", url]) #переходим в получившийся каталог" os.system("cd \folder2")
В каталоге много файлов, мне нужно по конкретному файлу вызвать git log
В консоле я бы сделал git log file1.txt
Как это сделать в python не могу сообразить, пробовалsubprocess.check_call(["git", "log", "file1.txt"])
не получилось, подскажите как это делается?
-
12 июля 2018 г. 15:55, спустя 8 минут 55 секунд
@polin11, как-то так
subprocess.check_call(["git", "--git-dir=folder2/.git", "log", "--", "file1.txt"])
-
12 июля 2018 г. 17:04, спустя 1 час 8 минут 34 секунды
Мы юзаем GitPython==2.1.5
для работы файлового менеджера + blame
Smappi API - Universal Hosting for your API [smappi.org] Smappi API - Universal Hosting for your API
Smappi is platform for hosting, executing and sharing your API implementation with the ability to capitalize
smappi.org
https://smappi.org/ - платформа по созданию API на все случаи жизни -
-
12 июля 2018 г. 17:22, спустя 16 минут 53 секунды
@polin11,
from git import Repo, Commit repo = Repo.clone_from('[email protected]:smappi/smappi.git', '/tmp/xxx') \# Либо, если уже есть репа \# repo = Repo('/tmp/xxx') commits = list(repo.iter_commits('master', max_count=5)) [{'name': str(c.author), 'email': c.author.email, 'msg': c.message} for c in commits] [{'name': 'Mikhail Andreev (adw0rd)', 'email': '[email protected]', 'msg': '0.5.2\n'}, {'name': 'Mikhail Andreev (adw0rd)', 'email': '[email protected]', 'msg': 'Support undefined in doctetst (cause undefined is object)\n'}, {'name': 'Mikhail Andreev (adw0rd)', 'email': '[email protected]', 'msg': '0.5.1\n'}, {'name': 'Mikhail Andreev (adw0rd)', 'email': '[email protected]', 'msg': 'Bugfixed adaptResultByMask when object is undefined\n'}, {'name': 'Mikhail Andreev (adw0rd)', 'email': '[email protected]', 'msg': '0.5.0\n'}]
Спустя 109 сек.@Sinkler, доволен? )
https://smappi.org/ - платформа по созданию API на все случаи жизни -
-
12 июля 2018 г. 17:27, спустя 34 секунды
@polin11,
https://gist.github.com/adw0rd/776860ab63a7ca4b9b1d1e87c20dafda Спустя 55 сек.норм, через базу вставлял?
@Sinkler, новые сообщения дает писать, а то старое не получилось отредактировать, чтобы небыло так страшно как сейчас
https://smappi.org/ - платформа по созданию API на все случаи жизни -
14 июля 2018 г. 20:04, спустя 2 дня 2 часа 37 минут
Спасибо за рабочий пример!
Меня интересует следующее: в репозитории много файлов,
мне нужно определить автора последнего коммита, который изменил определенный файл,
не подскажите как это сделать? -
15 июля 2018 г. 0:32, спустя 4 часа 27 минут 54 секунды
https://smappi.org/ - платформа по созданию API на все случаи жизни -
16 июля 2018 г. 0:43, спустя 1 день 11 минут
@adw0rd,
Спасибо большое, это то, что мне нужно!!!
Скажите пожалуйста, клонировать репозиторий это единственный вариант?
Репозиторий достаточно большой, клонирование занимает определённое время и место на диске,
возможно ли отправить в github какой-нибудь запрос, и получить автора последнего коммита, изменившего определенный файл? -
16 июля 2018 г. 12:25, спустя 11 часов 41 минуту 41 секунду
@polin11, сам git такое не умеет, но такое возможно сделать через API
Commits | GitHub Developer Guide [developer.github.com] Спустя 191 сек.https://gist.github.com/adw0rd/e62b9a4596e99635e24f70e675894ec0 Commits | GitHub Developer Guide
developer.github.com
https://smappi.org/ - платформа по созданию API на все случаи жизни
Пожалуйста, авторизуйтесь, чтобы написать комментарий!