2010-03-18 95 views

回答

7

你完成後在結帳或列出遠程/本地分行

from git import Git 
g = Git() 

(可能還有其他一些命令將init初始化爲您關心的存儲庫),g上的所有屬性請求或多或少地轉換爲git attr *args的調用。

因此:

g.checkout("mybranch") 

應該做你想要什麼。

g.branch() 

將列出分支。但是請注意,這些命令的級別非常低,它們將返回git可執行文件將返回的確切代碼。因此,不要指望一個好的列表。我只是一串由幾行組成的行,並且一行有一個星號作爲第一個字符。

在庫中可能有一些更好的方法來做到這一點。例如repo.py是一個特殊的active_branch命令。你將不得不經過源代碼並尋找自己。目前

+0

當我運行R = Git.clone( 「混帳......」)r.checkout( 「發展」)不工作.. AttributeError的: '海峽' 對象有沒有屬性 '結賬' – Mike 2010-03-18 20:28:05

+0

好像看起來像我需要運行ag = Git(「dir 「)然後我可以結賬 – Mike 2010-03-18 20:29:15

+0

可能。我用'g'克隆了一下,然後工作。 – Debilski 2010-03-18 20:32:59

4

要列出分支機構可以使用:

from git import Repo 
r = Repo(your_repo_path) 
repo_heads = r.heads # or it's alias: r.branches 

r.heads回報git.util.IterableList(繼承list後)git.Head對象的,所以您可以:

repo_heads_names = [h.name for h in repo_heads] 

而且結帳如。 master:在問題中提到

repo_heads['master'].checkout() 
# you can get elements of IterableList through it_list['branch_name'] 
# or it_list.branch_name 

模塊是GitPython,其movedgitoriousGithub

1

我有類似的問題。在我的情況下,我只想列出本地跟蹤的遠程分支。這爲我工作:

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) 

如果需要所有遠程分支,我寧願直接運行git:

def get_all_branches(path): 
    cmd = ['git', '-C', path, 'branch', '-a'] 
    out = subprocess.check_output(cmd, stderr=subprocess.STDOUT) 
    return out 
+1

如果你已經有一個Repo實例,你可以直接調用git命令:'''repo.git.branch(' - a')''' – dusktreader 2017-08-08 18:12:51

0

只是爲了使其顯而易見的 - 從當前獲取遠程分支的列表回購目錄:

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)