Я пытаюсь получить список всех веток, доступных в моем хранилище, используя Python с этим кодом:

import subprocess

branches = ["All"]
command = "git branch -r"
branch_list = subprocess.check_output(command)

for branch in branch_list:
   print branch
   branches.append[branch]

Я хочу иметь что-то вроде:

print branches[0] # is "All"
print branches[1] # is "branch1"
print branches[2] # is "branch2"
etc etc

Но вместо этого у меня есть

print branches[0] # is "All"
print branches[1] # is "b"
print branches[2] # is "r"
print branches[3] # is "a"
print branches[4] # is "n"
print branches[5] # is "c"
print branches[6] # is "h"
etc etc

Спасибо за ваше время и вашу помощь

2
MagicaNexus 5 Июл 2019 в 18:39

3 ответа

Лучший ответ

Взгляните на check_output документацию, Похоже, что мы получаем блок байтов обратно. Чтобы упростить работу, мы можем расшифровать его. Затем, поскольку git branch -r выводит одну ветвь на строку, разбейте строку на новые строки:

branches = subprocess.check_output(command).decode().split('\n')

Но я думаю, что есть еще более простой способ сделать это. Каждый отдельный объект в git соответствует некоторому файлу в каталоге .git. В этом случае вы можете найти свой список ветвей в .git/refs/heads:

import os
branches = os.listdir('.git/refs/heads')
3
wbadart 5 Июл 2019 в 15:50

Для python3

import subprocess

# refs/remotes for remote tracking branches.
# refs/heads for local branches if necessary, and
# refs/tags for tags
cmd = 'git for-each-ref refs/remotes --format="%(refname)"'
status, output = subprocess.getstatusoutput(cmd)
branches = ["All"]
if status == 0:
    branches += output.split('\n')
print(branches)

Для python2 замените subprocess на commands.

0
ElpieKay 6 Июл 2019 в 03:52

Попробуйте decode это:

stdout = subprocess.check_output('git branch -a'.split())
out = stdout.decode()
branches = [b.strip('* ') for b in out.splitlines()]
print(branches)

Выход:

['master', 'second', 'test']
2
abdusco 5 Июл 2019 в 15:51