使用 PyGithub 和 Python 将本地 git 存储库推送到用户的远程 git 存储库
Push local git repository to a user's remote git repository using PyGithub and Python
任务是
- 克隆 public 存储库并将其存储在本地
- 使用您在本地下载的存储库内容初始化用户的新存储库(目标)。
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/master
。 refs/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")
任务是
- 克隆 public 存储库并将其存储在本地
- 使用您在本地下载的存储库内容初始化用户的新存储库(目标)。
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/master
。 refs/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")