我正在使用 GitPython 从 Gitlab 服务器克隆存储库。
git.Repo.clone_from(gitlab_ssh_URL, local_path)
Run Code Online (Sandbox Code Playgroud)
后来我有另一个脚本试图更新这个 repo。
try:
my_repo = git.Repo(local_path)
my_repo .remotes.origin.pull()
except (git.exc.InvalidGitRepositoryError, git.exc.NoSuchPathError):
print("Invalid repository: {}".format(local_path)
Run Code Online (Sandbox Code Playgroud)
这很好用,除非我在中间结帐这样的标签:
tag_id = choose_tag() # Return the position of an existing tag in my_repo.tags
my_repo .head.reference = my_repo.tags[tag_id]
my_repo .head.reset(index=True, working_tree=True)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我在拉取时收到 GitCommandError:
Run Code Online (Sandbox Code Playgroud)git.exc.GitCommandError: 'git pull -v origin' returned with exit code 1
我已经阅读了两次文档,但我不知道问题出在哪里。特别是因为如果我尝试使用像 SourceTree 这样的专用工具来拉这个 repo,它可以正常工作而不会出现错误或警告。我不明白即使使用分离的 HEAD 签出标记版本的事实如何阻止我拉。
编辑:作为建议,我试图查看 exception.stdout 和 exception.sterr,这里没有任何用处(分别是 b'' 和 None)。这就是为什么我很难理解出了什么问题。