Вроде бы простая задача - написать скрипт, который, выдаст автора ветки в удаленном репозитории в git'е.
Какая питоновская библиотека подойдет для этого лучше? Если кто-то заморачивался такой же задачей и у него есть результат, прошу поделиться наработками.
Форум → Программирование → Python → python и работа с git
python и работа с git
-
-
Июль 12, 2018, 3: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, 3:55 п.п., спустя 8 минут 55 секунд
@polin11, как-то так
subprocess.check_call(["git", "--git-dir=folder2/.git", "log", "--", "file1.txt"])
-
Июль 12, 2018, 5: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, 5: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, 5:27 п.п., спустя 34 секунды
@polin11,
https://gist.github.com/adw0rd/776860ab63a7ca4b9b1d1e87c20dafda Спустя 55 сек.норм, через базу вставлял?
@Sinkler, новые сообщения дает писать, а то старое не получилось отредактировать, чтобы небыло так страшно как сейчас
https://smappi.org/ - платформа по созданию API на все случаи жизни -
Июль 14, 2018, 8:04 п.п., спустя 2 дня 2 часа 37 минут
Спасибо за рабочий пример!
Меня интересует следующее: в репозитории много файлов,
мне нужно определить автора последнего коммита, который изменил определенный файл,
не подскажите как это сделать? -
Июль 15, 2018, 12:32 д.п., спустя 4 часа 27 минут 54 секунды
https://smappi.org/ - платформа по созданию API на все случаи жизни -
Июль 16, 2018, 12: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 на все случаи жизни
Пожалуйста, авторизуйтесь, чтобы написать комментарий!