102

我有一个想要推送到 Bitbucket 和 GitHub 的存储库。由两者托管我的存储库至关重要。

有没有办法在 Git 中做到这一点?

4

4 回答 4

134

您可以通过 git 使用多个远程存储库。但是我相信你必须分别推入你的两个遥控器。

例如,如果您的项目当前指向 github,您可以将当前远程存储库重命名为github

$ git remote rename origin github

然后,您可以添加另一个远程存储库,例如bitbucket

$ git remote add bitbucket git@bitbucket.org:your_user/your_repo.git

现在,为了将更改推送到 github 或 bitbucket 上的相应分支,您可以这样做:

$ git push github HEAD
$ git push bitbucket HEAD

相同的规则适用于拉取:您需要指定要从哪个遥控器拉取:

$ git pull github your_branch
$ git pull bitbucket your_branch
于 2012-10-18T18:42:05.207 回答
33

是的,你可以这么做。您不必推送两次,只需推送一次即可推送到两个远程存储库。我之前遇到过同样的问题,所以在这里写了如何做。 Git:从 Github 和 Bitbucket 推送/拉取

于 2013-06-26T16:08:26.330 回答
30

一些简单的解决方案。

多个遥控器独立推送(和获取)

这是最容易理解的方法,但维护起来最费力。

我们首先添加我们的新遥控器:

$ cd myproject 
$ git remote add bitbucket ssh://git@bitbucket.org/user/myproject.git 
$ git push bitbucket master

直接说不行吗?当然,每次我们提交任何更改时,我们都需要推送到我们原来的“原点”和新的远程“bitbucket”:

$ git push origin master
$ git push bitbucket master

不是很大的开销,但我相信它会随着时间的推移而增加。或者你可以创建一个`alias gpob="git push origin master && git push bitbucket master"。

具有多个 URL 的单个远程连续推送(和获取)

使用此方法,我们将向现有的远程“来源”添加一个额外的 URL:

$ cd myproject
$ git remote set-url --add origin ssh://git@bitbucket.org/user/myproject.git
$ git push origin master
Everything up-to-date
Everything up-to-date

少了很多努力!

当然,一线希望有云,在这种情况下,虽然我们可以同时推送到多个 URL,但我们只能从原始“源”获取(您可以更改它,但这超出了本文的范围)。

最后,查看将从哪个遥控器获取:

$ git remote -v show

我也写过博客

于 2015-08-17T02:58:22.230 回答
0

我也有类似的情况。就像我有一个现有的 BitBucket 分支,过去几个月我在其中管理或更新我的代码表单。

现在我的要求是将我的项目上传到 GitHub 中,并且只有一个“主”分支。

步骤1 -

这是我现有的 BitBucket 项目回购信息。

$ git remote -v show 

origin  https://<USERNAME>@bitbucket.org/<USERNAME>/<PROJECT_NAME>.git (fetch)
origin  https://<USERNAME>@bitbucket.org/<USERNAME>/<PROJECT_NAME>.git (push)

第2步 -

添加一个远程 github repo url -

$ git remote set-url origin --add https://github.com/<USERNAME>/<PROJECT_NAME>.git

现在,它也有 github 信息($ git remote -v show)。

origin  https://<USERNAME>@bitbucket.org/<USERNAME>/<PROJECT_NAME>.git (fetch)
origin  https://<USERNAME>@bitbucket.org/<USERNAME>/<PROJECT_NAME>.git (push)
origin  https://github.com/<USERNAME>/<PROJECT_NAME>.git (push)

第 3 步 -

重命名存储库以更好地理解 -

$ git remote add bitbucket https://<USERNAME>@bitbucket.org/<USERNAME>/<PROJECT_NAME>.git
$ git remote add github https://github.com/<USERNAME>/<PROJECT_NAME>.git

现在,信息已更新($ git remote -v show)。

bitbucket   https://<USERNAME>@bitbucket.org/<USERNAME>/<PROJECT_NAME> (fetch)
bitbucket   https://<USERNAME>@bitbucket.org/<USERNAME>/<PROJECT_NAME> (push)
github      https://github.com/<USERNAME>/<PROJECT_NAME>.git (fetch)
github      https://github.com/<USERNAME>/<PROJECT_NAME>.git (push)
origin      https://<USERNAME>@bitbucket.org/<USERNAME>/<PROJECT_NAME> (fetch)
origin      https://<USERNAME>@bitbucket.org/<USERNAME>/<PROJECT_NAME> (push)
origin      https://github.com/<USERNAME>/<PROJECT_NAME>.git (push)

第4步 -

是时候在 GitHub 中提交/推送整个项目了。

$ git add --all && git commit -m "first commit"

$ git push -u origin master

结果我得到了这个错误 -

Everything up-to-date
Branch 'master' set up to track remote branch 'master' from 'origin'.
remote: Repository not found.
fatal: repository 'https://github.com/<USERNAME>/<PROJECT_NAME>.git/' not found

第 5 步(SSH 密钥设置) -

经过几个小时的调查,我发现这是 SSH 关键问题。

因此,我为 BitBucket 和 GitHub 生成 SSH 密钥,并将这些密钥添加到我各自的帐户中。

第 6 步(设置 SSH 存储库 URL) -

https://将 URL更改ssh为 BitBucket 和 GitHub。

$ git remote set-url bitbucket git@bitbucket.org:<USERNAME>/<PROJECT_NAME>.git
$ git remote set-url github git@github.com:<USERNAME>/<PROJECT_NAME>.git

删除原点以更改原点 repo url。

$ git remote rm origin 

添加第一个来源(BitBucket) -

$ git remote add origin git@bitbucket.org:<USERNAME>/<PROJECT_NAME>.git

添加第二个来源(GitHub) -

$ git remote set-url origin --add git@github.com:<USERNAME>/<PROJECT_NAME>.git

所有 repo url 更改为ssh.

$ git remote -v show

bitbucket    git@bitbucket.org:<USERNAME>/<PROJECT_NAME>.git (fetch)
bitbucket    git@bitbucket.org:<USERNAME>/<PROJECT_NAME>.git (push)
github       git@github.com:<USERNAME>/<PROJECT_NAME>.git (fetch)
github       git@github.com:<USERNAME>/<PROJECT_NAME>.git (push)
origin       git@bitbucket.org:<USERNAME>/<PROJECT_NAME>.git (fetch)
origin       git@bitbucket.org:<USERNAME>/<PROJECT_NAME>.git (push)
origin       git@github.com:<USERNAME>/<PROJECT_NAME>.git (push)

第 7 步 -

我已经添加并提交了代码,所以我只需要推送。

$ git push -u origin master

您确定要继续连接(是/否/[指纹])?是的

最后,整个项目在 master 分支推送到 GitHub。


将代码推送到两个分支 -

$ git push

仅将代码推送到 GitHub 或 BitBucket -

$ git push github master 或者 $ git push bitbucket master

更改分支 -

$ git checkout <BRANCH_NAME>

实时保存信息 -

  1. 一个项目同时使用 Bitbucket 和 GitHub
  2. 删除远程源

重要的提示

第 5 步和第 6 步很有用如果您使用的是http://repo url,请将其更改ssh为以更好地维护 repo。

或者如果有人在第 1 步之后找到了repo url,最好使用第 5 步和第 6https://步/$ git remote -v show

如果有人已经有sshrepo,请忽略第 5 步和第 6 步。

于 2022-02-08T17:09:05.143 回答