克隆 git 存储库的 Python 方法

有没有不使用子进程克隆 git 存储库的 Python 方法?我可以使用你推荐的任何模块。

274291 次浏览

巨蟒。之前和内部都没有听说过它,它依赖于在某个地方拥有 git 可执行文件; 另外,它们可能有大量的 bug。但值得一试。

如何做到 克隆人:

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

(这不是很好,我不知道这是否是支持的方式,但它确实起作用了。)

有了达利奇小费,你应该可以做到:

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

这仍然是非常基本的——它跨对象和参考文献进行复制,但是如果您创建了一个非空的存储库,它还不能创建工作树的内容。

使用 巨蟒将为 Git 提供一个良好的 python 接口。

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

from git import Repo


Repo.clone_from(git_url, repo_dir)

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

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

Github 的 Libgit2绑定,Pygit2提供了一行程序克隆一个远程目录:

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

我的解决方案非常简单直接,甚至不需要手动输入口令/密码。

这是我的完整代码:

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

这是使用 gitpython 模块的 gitpull 和 gitpush 的示例代码。

import os.path
from git import *
import git, os, shutil
# create local Repo/Folder
UPLOAD_FOLDER = "LocalPath/Folder"
if not os.path.exists(UPLOAD_FOLDER):
os.makedirs(UPLOAD_FOLDER)
print(UPLOAD_FOLDER)
new_path = os.path.join(UPLOADFOLDER)
DIR_NAME = new_path
REMOTE_URL = "GitURL"  # if you already connected with server you dont need to give
any credential
# REMOTE_URL looks "git@github.com:path of Repo"
# code for clone
class git_operation_clone():
try:
def __init__(self):
self.DIR_NAME = DIR_NAME
self.REMOTE_URL = REMOTE_URL


def git_clone(self):


if os.path.isdir(DIR_NAME):
shutil.rmtree(DIR_NAME)
os.mkdir(DIR_NAME)
repo = git.Repo.init(DIR_NAME)
origin = repo.create_remote('origin', REMOTE_URL)
origin.fetch()
origin.pull(origin.refs[0].remote_head)
except Exception as e:
print(str(e))
# code for push
class git_operation_push():
def git_push_file(self):
try:
repo = Repo(DIR_NAME)
commit_message = 'work in progress'
# repo.index.add(u=True)
repo.git.add('--all')
repo.index.commit(commit_message)
origin = repo.remote('origin')
origin.push('master')
repo.git.add(update=True)
print("repo push succesfully")
except Exception as e:
print(str(e))
if __name__ == '__main__':
a = git_operation_push()
git_operation_push.git_push_file('')
git_operation_clone()
git_operation_clone.git_clone('')

这里有一种方法打印进度,同时克隆与 巨蟒回购

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())

相当简单的方法是只传递信用证在网址,可以有点怀疑虽然-谨慎使用。

import os


def getRepo(repo_url, login_object):
'''
Clones the passed repo to my staging dir
'''


path_append = r"stage\repo" # Can set this as an arg
os.chdir(path_append)


repo_moddedURL = 'https://' + login_object['username'] + ':' + login_object['password'] + '@github.com/UserName/RepoName.git'
os.system('git clone '+ repo_moddedURL)


print('Cloned!')




if __name__ == '__main__':
getRepo('https://github.com/UserName/RepoYouWant.git', {'username': 'userName', 'password': 'passWord'})

巨蟒3

第一个安装模块:

pip3 install gitpython

然后编码:)

from git.repo.base import Repo
Repo.clone_from("https://github.com/*****", "folderToSave")

我希望这能帮到你

你可以使用 下载

import dload
dload.git_clone("https://github.com/some_repo.git")

pip install dload

在 windows 上克隆回购最简单的方法是:

  1. 匹普安装克隆
  2. 克隆[ REPO ][用户名]

示例: 克隆 Wifi-Brute Cyber-Diox

您可以通过 shell 命令执行它

进口操作系统 System (“ pip install clone”) Os.system (“克隆 SSH-Brute Cyber-Diox”)

我们可以使用没有任何库的简单解决方案。

#!/usr/bin/python
import os


destination_path  = "destination/path/where/project/to/be/cloned"
clone_command = "git clone https://your.git.servername/git-folder/repo-name.git"


clone_with_path = clone_command  +" "+ destination_path
os.system(clone_with_path)

Perk: 如果目标文件夹不存在,它将创建一个目标文件夹。