Checkout or list remote branches in GitPython
I don't see an option to checkout or list remote/local branches in this module: https://git开发者_开发百科python.readthedocs.io/en/stable/
For those who want to just print the remote branches:
# Execute from the repository root directory
repo = git.Repo('.')
remote_refs = repo.remote().refs
for refs in remote_refs:
print(refs.name)
To list branches you can use:
from git import Repo
r = Repo(your_repo_path)
repo_heads = r.heads # or it's alias: r.branches
r.heads
returns git.util.IterableList
(inherits after list
) of git.Head
objects, so you can:
repo_heads_names = [h.name for h in repo_heads]
And to checkout eg. master
:
repo_heads['master'].checkout()
# you can get elements of IterableList through it_list['branch_name']
# or it_list.branch_name
Module mentioned in the question is GitPython
which moved from gitorious
to Github.
After you’ve done
from git import Git
g = Git()
(and possibly some other command to init g
to the repository you care about) all attribute requests on g
are more or less transformed into a call of git attr *args
.
Therefore:
g.checkout("mybranch")
should do what you want.
g.branch()
will list the branches. However, note that these are very low level commands and they will return the exact code that the git executables will return. Therefore, don’t expect a nice list. I’ll just be a string of several lines and with one line having an asterisk as the first character.
There might be some better way to do this in the library. In repo.py
for example is a special active_branch
command. You’ll have to go through the source a little and look for yourself.
I had a similar issue. In my case I only wanted to list the remote branches that are tracked locally. This worked for me:
import git
repo = git.Repo(repo_path)
branches = []
for r in repo.branches:
branches.append(r)
# check if a tracking branch exists
tb = t.tracking_branch()
if tb:
branches.append(tb)
In case all remote branches are needed, I would prefer running git directly:
def get_all_branches(path):
cmd = ['git', '-C', path, 'branch', '-a']
out = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
return out
Just to make it obvious - to get a list of remote branches from the current repo directory:
import os, git
# Create repo for current directory
repo = git.Repo(os.getcwd())
# Run "git branch -r" and collect results into array
remote_branches = []
for ref in repo.git.branch('-r').split('\n'):
print ref
remote_branches.append(ref)
Basically, with GitPython, if you know how to do it within command line, but not within the API, just use repo.git.action("your command without leading 'git' and 'action'"), example: git log --reverse => repo.git.log('--reverse')
in this case https://stackoverflow.com/a/47872315/12550269
So I try this command:
repo = git.Repo()
repo.git.checkout('-b', local_branch, remote_branch)
this command can make a new local branch name local_branch
(if already haved, rasie error) and set up to track remote branch remote_branch
it works very well!
精彩评论