2010-03-18 32 views
36

Có cách Python nào không sử dụng một tiến trình con để sao chép kho lưu trữ git không? Tôi đang sử dụng bất kỳ loại mô-đun nào bạn đề xuất.Cách Python để sao chép kho lưu trữ git

+3

gitpy, tôi đoán nó sẽ được gọi là – SilentGhost

+0

@SilentGhost: bạn có ý nghĩa * * gitpy này? http://github.com/vmalloc/gitpy từ http://www.ryaari.com/blog/?p=9 – VonC

+0

Có vẻ như có GitPython (http://pypi.python.org/pypi/GitPython, http: //gitorious.org/git-python) mà tôi không nghĩ rằng có một phương pháp sao chép, nhưng tôi sẽ đặt cược bạn có thể thêm một ... nội bộ nó sẽ phải gọi 'git clone' anyway. – Cascabel

Trả lời

19

http://gitorious.org/git-python/. Đã không nghe nói về nó trước và trong nội bộ, nó dựa vào việc thực thi git ở đâu đó; ngoài ra, chúng có thể có nhiều lỗi. Nhưng nó có thể là giá trị một thử.

Làm thế nào để sao chép:

import git 
git.Git("/your/directory/to/clone").clone("git://gitorious.org/git-python/mainline.git") 

(. Đó không phải là tốt đẹp và tôi không biết nếu nó là cách hỗ trợ để làm điều đó, nhưng nó làm việc)

+0

Tôi không tin những bản sao này. – Cascabel

+0

. Nhưng nó là một chút phức tạp. – Debilski

+1

Ồ, xấu của tôi, tôi đã bỏ lỡ khả năng đó. Mike, chỉ cần nhớ, trong nội bộ này là chỉ cần gọi thực thi git anyway; nó chỉ quản lý nó một chút cho bạn. – Cascabel

1

Với Dulwich mẹo mà bạn nên có thể làm:

from dulwich.repo import Repo 
Repo("/path/to/source").clone("/path/to/target") 

Điều này vẫn còn rất cơ bản - nó sao chép qua các đối tượng và refs, nhưng chưa tạo nội dung của cây đang hoạt động nếu bạn tạo kho lưu trữ không trống.

60

Sử dụng GitPython sẽ cung cấp cho bạn giao diện trăn tốt cho Git.

Ví dụ, sau khi cài đặt nó (pip install gitpython), cho nhân bản một kho lưu trữ mới, bạn có thể sử dụng clone_from chức năng:

from git import Repo 

Repo.clone_from(git_url, repo_dir) 

Lưu ý: GitPython đòi hỏi git đang được cài đặt trên hệ thống, và truy cập qua PATH hệ thống .

+1

Đã không làm việc cho tôi vì "pip install gitpython" không cài đặt phiên bản mới nhất, thay vì cài đặt 1.7 mà không có clone_from. Xin lỗi cho downvote, b: (của tôi: – blented

+4

@blented Cảm ơn đã đề cập đến, nhưng tiếc là do phiên bản GitPython của chúng tôi (1.7 đã quá cũ). 'pip install gitpython == 0.3.2.RC1' thay vào đó! –

+1

@AmirAliAkbari 0.3.2 RC1 hiện là ứng cử viên cài đặt mặc định. – Kasisnu

4

Github của libgit2 ràng buộc, pygit2 cung cấp một lớp lót nhân bản một thư mục từ xa:

clone_repository(url, path, 
    bare=False, repository=None, remote=None, checkout_branch=None, callbacks=None) 
4

Giải pháp của tôi rất đơn giản và thẳng về phía trước. Nó thậm chí không cần mục nhập bằng tay của diễn giải/mật khẩu.

Dưới đây là mã hoàn chỉnh của tôi:

import os 
import sys 

path  = "/path/to/store/your/cloned/project" 
clone  = "git clone [email protected]:/your/project/name.git" 

os.system("sshpass -p your_password ssh [email protected]_localhost") 
os.chdir(path) # Specifying the path where the cloned project has to be copied 
os.system(clone) # Cloning 

print "\n CLONED SUCCESSFULLY.! \n" 
Các vấn đề liên quan