ФорумПрограммированиеPython → python и работа с git

python и работа с git

  • polin11

    Сообщения: 41 Репутация: N Группа: Кто попало

    Spritz Июль 12, 2018, 12:06 д.п.

    Вроде бы простая задача - написать скрипт, который, выдаст автора ветки в удаленном репозитории в git'е.
    Какая питоновская библиотека подойдет для этого лучше? Если кто-то заморачивался такой же задачей и у него есть результат, прошу поделиться наработками.

  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо
  • polin11

    Сообщения: 41 Репутация: N Группа: Кто попало

    Spritz Июль 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"]) 
    

    не получилось, подскажите как это делается?

  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz Июль 12, 2018, 3:55 п.п., спустя 8 минут 55 секунд

    @polin11, как-то так

    subprocess.check_call(["git", "--git-dir=folder2/.git", "log", "--", "file1.txt"])
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Июль 12, 2018, 5:04 п.п., спустя 1 час 8 минут 34 секунды

    Мы юзаем GitPython==2.1.5
    для работы файлового менеджера + blame
    Smappi API - Universal Hosting for your API [smappi.org]

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz Июль 12, 2018, 5:06 п.п., спустя 1 минуту 45 секунд

    что-то дудов антиспам не работает smile

  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Июль 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 на все случаи жизни
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz Июль 12, 2018, 5:26 п.п., спустя 3 минуты 37 секунд

    норм, через базу вставлял? smile

  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Июль 12, 2018, 5:27 п.п., спустя 34 секунды

    @polin11,

    https://gist.github.com/adw0rd/776860ab63a7ca4b9b1d1e87c20dafda

    Спустя 55 сек.

    норм, через базу вставлял? smile

    @Sinkler, новые сообщения дает писать, а то старое не получилось отредактировать, чтобы небыло так страшно как сейчас

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • polin11

    Сообщения: 41 Репутация: N Группа: Кто попало

    Spritz Июль 14, 2018, 8:04 п.п., спустя 2 дня 2 часа 37 минут

    Спасибо за рабочий пример!
    Меня интересует следующее: в репозитории много файлов,
    мне нужно определить автора последнего коммита, который изменил определенный файл,
    не подскажите как это сделать?

  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Июль 15, 2018, 12:32 д.п., спустя 4 часа 27 минут 54 секунды

    @polin11,
    https://gist.github.com/adw0rd/6763366d55c8c61a0cb58e2fd56e0c85

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • polin11

    Сообщения: 41 Репутация: N Группа: Кто попало

    Spritz Июль 16, 2018, 12:43 д.п., спустя 1 день 11 минут

    @adw0rd,
    Спасибо большое, это то, что мне нужно!!!
    Скажите пожалуйста, клонировать репозиторий это единственный вариант?
    Репозиторий достаточно большой, клонирование занимает определённое время и место на диске,
    возможно ли отправить в github какой-нибудь запрос, и получить автора последнего коммита, изменившего определенный файл?

  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Июль 16, 2018, 12:25 п.п., спустя 11 часов 41 минуту 41 секунду

    @polin11, сам git такое не умеет, но такое возможно сделать через API Commits | GitHub Developer Guide [developer.github.com]

    Спустя 191 сек.

    https://gist.github.com/adw0rd/e62b9a4596e99635e24f70e675894ec0

    https://smappi.org/ - платформа по созданию API на все случаи жизни

Пожалуйста, авторизуйтесь, чтобы написать комментарий!