Python克隆git存储库的方法

Mik*_*ike 69 python git module

有没有使用子进程来克隆git存储库的Python方法?我想要使​​用你推荐的任何模块.

Ami*_*ari 111

使用GitPython将为您提供一个良好的Git python接口.

例如,在安装it(pip install gitpython)之后,为了克隆新的存储库,您可以使用clone_from函数:

from git import Repo

Repo.clone_from(git_url, repo_dir)
Run Code Online (Sandbox Code Playgroud)

有关使用Repo对象的示例,请参阅GitPython教程.

注意: GitPython需要在系统上安装git,并可通过系统的PATH访问.

  • 如果必须以自动化方式运行,如何处理身份验证? (3认同)
  • 您可以在 git_url 中提供身份验证,具体取决于您克隆存储库的位置,您可能需要将用户名和密码/pat 放在那里。请参阅此处的 [Github](/sf/ask/703802291/) (3认同)
  • 我们能得到一个 `git_url` 和 `repo_dir` 的例子吗? (3认同)

Deb*_*ski 42

GitPython.在内部和内部都没有听说过,它依赖于某处的git可执行文件; 此外,他们可能有很多错误.但它值得一试.

如何克隆:

import git
git.Git("/your/directory/to/clone").clone("git://gitorious.org/git-python/mainline.git")
Run Code Online (Sandbox Code Playgroud)

(这不好,我不知道它是否是支持的方式,但它有效.)

  • 如果必须以自动化方式运行,如何处理身份验证? (3认同)

小智 15

我的解决方案非常简单直接.它甚至不需要手动输入释义/密码.

这是我的完整代码:import sys import os

import sys
import os

path  = "/path/to/store/your/cloned/project" 
clone = "git clone gitolite@<server_ip>:/your/project/name.git" 

os.system("sshpass -p your_password ssh user_name@your_localhost")
os.chdir(path) # Specifying the path where the cloned project needs to be copied
os.system(clone) # Cloning
Run Code Online (Sandbox Code Playgroud)

  • 效果很好,但是如果您在项目中使用其他相对路径,则在使用 os.chdir(...) 更改并重置之前,您可能需要记住真正的工作目录 os.getcwd() 。之后又回来了。 (2认同)
  • @Maximosaic 这可以通过使用`git clone &lt;repo_url&gt; &lt;target_path&gt;`来避免。无需使用“chdir” (2认同)

cri*_*aig 10

这是一种在使用GitPython克隆存储库时打印进度的方法

import time
import git
from git import RemoteProgress

class CloneProgress(RemoteProgress):
    def update(self, op_code, cur_count, max_count=None, message=''):
        if message:
            print(message)

print('Cloning into %s' % git_root)
git.Repo.clone_from('https://github.com/your-repo', '/your/repo/dir', 
        branch='master', progress=CloneProgress())
Run Code Online (Sandbox Code Playgroud)

  • 以下是[如何写出好的答案?](https://stackoverflow.com/help/how-to-answer) 的一些指南。这个提供的答案可能是正确的,但它可能会受益于解释。仅代码答案不被视为“好”答案。来自[评论](https://stackoverflow.com/review)。 (2认同)

chi*_*ffa 8

Github的libgit2绑定,pygit2提供了一个单行克隆远程目录:

clone_repository(url, path, 
    bare=False, repository=None, remote=None, checkout_branch=None, callbacks=None)
Run Code Online (Sandbox Code Playgroud)


Mik*_*era 8

对于蟒蛇 3

首先安装模块:

pip3 install gitpython
Run Code Online (Sandbox Code Playgroud)

稍后,对其进行编码:)

import os
from git.repo.base import Repo
Repo.clone_from("https://github.com/*****", "folderToSave")
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助你


Ped*_*ito 5

您可以使用dload

import dload
dload.git_clone("https://github.com/some_repo.git")
Run Code Online (Sandbox Code Playgroud)
pip install dload
Run Code Online (Sandbox Code Playgroud)