2010-03-18 18 views

Trả lời

7

Sau khi bạn đã thực hiện

from git import Git 
g = Git() 

(và có thể một số lệnh khác để init g đến kho lưu trữ mà bạn quan tâm) tất cả các yêu cầu thuộc tính trên g ít nhiều được chuyển thành cuộc gọi git attr *args.

Do đó:

g.checkout("mybranch") 

nên làm những gì bạn muốn.

g.branch() 

sẽ liệt kê các chi nhánh. Tuy nhiên, lưu ý rằng đây là các lệnh mức rất thấp và chúng sẽ trả về mã chính xác mà các thực thi git sẽ trả về. Do đó, đừng mong đợi một danh sách tốt đẹp. Tôi sẽ chỉ là một chuỗi của một số dòng và với một dòng có dấu hoa thị làm ký tự đầu tiên.

Có thể có một số cách tốt hơn để thực hiện việc này trong thư viện. Ví dụ: repo.py là lệnh đặc biệt active_branch. Bạn sẽ phải đi qua nguồn một chút và tự tìm kiếm.

+0

khi tôi chạy r = Git.clone ("git ...") r.checkout ("phát triển") không hoạt động .. AttributeError: đối tượng 'str' không có thuộc tính 'checkout' – Mike

+0

ok có vẻ như tôi cần chạy ag = Git ("dir ") sau đó tôi có thể thanh toán – Mike

+0

Có thể. Tôi chỉ nhân bản với 'g' và sau đó nó hoạt động. – Debilski

4

Để liệt kê các chi nhánh hiện tại bạn có thể sử dụng:

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

r.heads lợi nhuận git.util.IterableList (kế thừa sau list) của git.Head đối tượng, vì vậy bạn có thể:

repo_heads_names = [h.name for h in repo_heads] 

Và để kiểm tra ví dụ. master:

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

Mô-đun được đề cập trong câu hỏi là GitPythonmoved từ gitorious để Github.

1

Tôi gặp sự cố tương tự. Trong trường hợp của tôi, tôi chỉ muốn liệt kê các nhánh từ xa được theo dõi cục bộ. Điều này làm việc cho tôi:

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) 

Trong trường hợp tất cả các chi nhánh từ xa là cần thiết, tôi muốn chạy git trực tiếp:

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

Nếu bạn đã có một trường hợp Repo, bạn có thể gọi lệnh git trực tiếp như: '' 'repo.git.branch ('- a')' '' – dusktreader

0

Chỉ cần để làm cho nó rõ ràng - để có được một danh sách các chi nhánh từ xa từ hiện tại thư mục repo:

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) 
Các vấn đề liên quan