使用 PyGithub 和 Python 将本地 git 存储库推送到用户的远程 git 存储库

Push local git repository to a user's remote git repository using PyGithub and Python

任务是

  1. 克隆 public 存储库并将其存储在本地
  2. 使用您在本地下载的存储库内容初始化用户的新存储库(目标)。

CLI 命令完美运行,但 我需要使用 python 来完成,当我 运行 这段代码时,github登录对话框打开,我输入凭据,然后推送工作,但在远程存储库上看不到任何内容,我们可以什么都不推送吗?

我也试过使用 subprocess 模块,它不起作用。我已经检查了所有其他 Whosebug 解决方案,但没有找到有效的 solution.I 需要一个新的解决方案或尽快对此进行更正。谢谢

import git

git.Repo.clone_from('https://github.com/kristej/Uniform-Database-Management.git','Uniforms')

repo = git.Repo('Uniforms')
target_repo = "https://github.com/kristej/Jojorabit.git"

# List remotes
# Reference a remote by its name as part of the object
print(f'Remote name: {repo.remotes.origin.name}')
print(f'Remote URL: {repo.remotes.origin.url}')

# Delete a default remote if already present
if repo.remotes.origin.url != target_repo:
    repo.delete_remote(repo.remotes.origin.name)

# Create a new remote
try:
    remote = repo.create_remote('origin', url=target_repo)
except git.exc.GitCommandError as error:
    print(f'Error creating remote: {error}')
    
# Reference a remote by its name as part of the object
print(f'Remote name: {repo.remotes.origin.name}')
print(f'Remote URL: {repo.remotes.origin.url}')

#Push changes
print(repo.git.push("origin", "HEAD:refs/for/master"))

can we push nothing?

是的。如果没有push,则push成功。

$ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

$ git push
Everything up-to-date

但是你推到了一个奇怪的位置。 HEAD:refs/for/master 表示将 HEAD 推送到 refs/for/masterrefs/for/master 不是东西。我想你的意思是 refs/heads/master.

但是你不应该指定目的地,除非你真的需要,什么 HEAD 不是 master?让 Git 找出来源(当前签出的分支)及其目的地(当前分支的上游,或基于 push.default 的最佳猜测)。

您刚刚完成了一系列工作来更改 origin,您不需要再次指定它。还是那句话,让push根据本地分支的配置来判断push到哪里比较安全

print(repo.git.push())

您也不需要为一键更改 origin。您可以改为添加一个新的遥控器并推送到那个遥控器。

repo.create_remote('other_remote', url=target_repo)
repo.git.push("other_remote")