我正在尝试为我的用户制作一个小程序,用于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
,他就会很好地掌握主分支......
如果有人能解决我的问题吗?
我在哪里犯了错误?
由于
答案 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')