Вроде бы простая задача - написать скрипт, который, выдаст автора ветки в удаленном репозитории в git'е.
Какая питоновская библиотека подойдет для этого лучше? Если кто-то заморачивался такой же задачей и у него есть результат, прошу поделиться наработками.
Форум → Программирование → Python → python и работа с git
python и работа с git
-
-
12 июля 2018 г. 15:46, спустя 4 часа 42 минуты 32 секунды
Решил попробовать обойтить модулем subprocess, написал такой скрипт
import os, subprocess #клонируем репозиторий url = 'git@git.my.ru: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('git@github.com: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': 'x11org@gmail.com', 'msg': '0.5.2\n'}, {'name': 'Mikhail Andreev (adw0rd)', 'email': 'x11org@gmail.com', 'msg': 'Support undefined in doctetst (cause undefined is object)\n'}, {'name': 'Mikhail Andreev (adw0rd)', 'email': 'x11org@gmail.com', 'msg': '0.5.1\n'}, {'name': 'Mikhail Andreev (adw0rd)', 'email': 'x11org@gmail.com', 'msg': 'Bugfixed adaptResultByMask when object is undefined\n'}, {'name': 'Mikhail Andreev (adw0rd)', 'email': 'x11org@gmail.com', 'msg': '0.5.0\n'}]
Спустя 109 сек.@Sinkler, доволен? )
https://smappi.org/ - платформа по созданию API на все случаи жизни -
-
12 июля 2018 г. 17:27, спустя 34 секунды
@polin11,
https://gist.github.com/adw0rd/776860ab63a7ca4b9b1d1e87c20dafda This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersfrom git import Repo, Commit repo = Repo.clone_from('git@github.com: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': 'x11org@gmail.com', 'msg': '0.5.2\n'}, {'name': 'Mikhail Andreev (adw0rd)', 'email': 'x11org@gmail.com', 'msg': 'Support undefined in doctetst (cause undefined is object)\n'}, {'name': 'Mikhail Andreev (adw0rd)', 'email': 'x11org@gmail.com', 'msg': '0.5.1\n'}, {'name': 'Mikhail Andreev (adw0rd)', 'email': 'x11org@gmail.com', 'msg': 'Bugfixed adaptResultByMask when object is undefined\n'}, {'name': 'Mikhail Andreev (adw0rd)', 'email': 'x11org@gmail.com', 'msg': '0.5.0\n'}] Спустя 55 сек.норм, через базу вставлял?
@Sinkler, новые сообщения дает писать, а то старое не получилось отредактировать, чтобы небыло так страшно как сейчас
https://smappi.org/ - платформа по созданию API на все случаи жизни -
14 июля 2018 г. 20:04, спустя 2 дня 2 часа 37 минут
Спасибо за рабочий пример!
Меня интересует следующее: в репозитории много файлов,
мне нужно определить автора последнего коммита, который изменил определенный файл,
не подскажите как это сделать? -
15 июля 2018 г. 0:32, спустя 4 часа 27 минут 54 секунды
@polin11,
https://gist.github.com/adw0rd/6763366d55c8c61a0cb58e2fd56e0c85 This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersIn [1]: from git import Repo, Commit In [2]: repo = Repo('/tmp/xxx') In [3]: list(repo.iter_commits('master', 'README.md', max_count=1))[0].author Out[3]: <git.Actor "Mikhail Andreev (adw0rd) <x11org@gmail.com>"> 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 This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters% curl "https://api.github.com/repos/smappi/smappi/commits?path=README.md"|head -n42 { "sha": "01379e9475822e439749dbfc0ef3d9bcc4939601", "node_id": "MDY6Q29tbWl0MTA4MTM0MDU3OjAxMzc5ZTk0NzU4MjJlNDM5NzQ5ZGJmYzBlZjNkOWJjYzQ5Mzk2MDE=", "commit": { "author": { "name": "Mikhail Andreev", "email": "x11org@gmail.com", "date": "2018-07-13T12:10:50Z" }, "committer": { "name": "GitHub", "email": "noreply@github.com", "date": "2018-07-13T12:10:50Z" }, "message": "Update README.md", "tree": { "sha": "2a86ad0ddbc9d26d7d3f9dd082953cae0f415d8d", "url": "https://api.github.com/repos/smappi/smappi/git/trees/2a86ad0ddbc9d26d7d3f9dd082953cae0f415d8d" }, "url": "https://api.github.com/repos/smappi/smappi/git/commits/01379e9475822e439749dbfc0ef3d9bcc4939601", "comment_count": 0, }, "url": "https://api.github.com/repos/smappi/smappi/commits/01379e9475822e439749dbfc0ef3d9bcc4939601", "html_url": "https://github.com/smappi/smappi/commit/01379e9475822e439749dbfc0ef3d9bcc4939601", "comments_url": "https://api.github.com/repos/smappi/smappi/commits/01379e9475822e439749dbfc0ef3d9bcc4939601/comments", "author": { "login": "adw0rd", "id": 546889, "node_id": "MDQ6VXNlcjU0Njg4OQ==", "avatar_url": "https://avatars3.githubusercontent.com/u/546889?v=4", "gravatar_id": "", "url": "https://api.github.com/users/adw0rd", "html_url": "https://github.com/adw0rd", "followers_url": "https://api.github.com/users/adw0rd/followers", "following_url": "https://api.github.com/users/adw0rd/following{/other_user}", Commits | GitHub Developer Guide
developer.github.com
https://smappi.org/ - платформа по созданию API на все случаи жизни
Пожалуйста, авторизуйтесь, чтобы написать комментарий!