使用GitPython从远程存储库中克隆所有分支的存储库

时间:2015-03-11 14:52:43

标签: python gitpython

我正在尝试为我的用户制作一个小程序,用于git和其他的基本操作。克隆私有远程存储库我面临很多问题。

我有以下配置: Python 3.4 视窗 GitPython 在远程服务器上建立了Ssh连接。

这是我的代码:

print(blue + "Where to clone repos ?")
path_repo = input(cyan + "> " + green)
try:
    assert os.path.exists(path_repo)
except AssertionError:
    print(red + "Path does not exist")
continue
print(blue + "Name of Repos :")
name_repo = input(cyan + "> " + green)
remote_path = "git@dev01:/home/git/repos/{0}.git".format(name_repo)
local_path = "{0}/{1}".format(path_repo, name_repo)
# Repo.clone_from(remote_path, local_path)
repo = Repo.clone_from(remote_path, local_path)
#print(repo.git.fetch())
#print(repo.git.pull())
#print(repo.git.status())

这不会引发错误,但脚本会在结尾处停止并阻塞终端(在没有>>>的情况下给我无限空行)

运行之后,如果我进入Git Bash并输入git status他似乎没有创建分支,只需初始化。所以我添加了我的代码的最后3行,看看有什么改变,但没有。

如果在Git Bash中我输入git pull,他就会很好地掌握主分支......

如果有人能解决我的问题吗?

我在哪里犯了错误?

由于

1 个答案:

答案 0 :(得分:1)

您描述的代码和方法存在许多问题......

<强>一

首先,你有

continue

写在你的代码中间......所以我假设你提供的代码在某个循环中。 continue之后的所有代码都是死代码 - 它永远不会被执行。

因此,您似乎永远不会克隆任何东西......

<强>两个

要查看所有分支都在回购中,请使用git branch -va之类的内容。我担心git status不是为此做的。

<强>三

由于您似乎已经以某种方式获得了初始化的回购,因此您无法克隆到同一位置 - 因为克隆会创建回购。

<强>四

此外,检查目录是否存在没有意义 - 因为如果目录不存在,git clone会创建目录。

总结一下,请尝试下面这个简单的代码。由于repo已经存在,我已经注释掉可能导致错误的行。

print(blue + "Where to clone repo?")
path_repo = input(cyan + "> " + green)
print(blue + "Name of repo:")
name_repo = input(cyan + "> " + green)
remote_path = "git@dev01:/home/git/repos/{0}.git".format(name_repo)
local_path = "{0}/{1}".format(path_repo, name_repo)
#repo = Repo.clone_from(remote_path, local_path)
repo = Repo(local_path)
info = repo.remote('origin').fetch()
if not info:
    print('no fetch information')
for i in info:
    if i.note:
        print('fetched, note is: ' + i.note.strip())
    else:
        print('fetched, no note')