从GitHub到Bitbucket的分叉


160

我正在开发一个基于CakePHP的项目,该项目托管在GitHub上我的项目托管在Bitbucket上。他们两个都使用git。基本上,我想在我的Bitbucket存储库中创建CakePHP 的“叉子”(不知道使用的术语是否正确,因为我是git的新手),以便能够获取更新无需下载所有CakePHP zip / tar并替换文件夹,然后提交并推送,但可能需要使用“合并”(?)。


5
有关此类工作流程的一种好方法,请参见stackoverflow.com/questions/1811730/…
Dolbz

@Dolbz看来我需要的是正确的,谢谢!
熵2011年

Answers:


143

今天不可能在不同站点之间发送“拉取请求”。我在Bitbucket问题跟踪器中为此添加了功能请求:#3288。如果您要跟踪此信息,建议您将自己添加为关注者。

但是,您仍然可以将源代码从GitHub移至Bitbucket,而无需下载任何zip文件或tarball。您从GitHub克隆并推送到Bitbucket:

$ git clone https://github.com/cakephp/cakephp
$ cd cakephp
$ git push git@bitbucket.org:mg/cakephp.git master

mg/cakephp首先在Bitbucket中创建了一个空的Git存储库。这样,您可以将更改集从GitHub推/拉到Bitbucket。


3
那我们怎样才能从上游拉呢?
Ruchir Shukla 2014年

1
@RuchirShukla:基本上是一样的。您必须通过从上游拉动来在自己的计算机上移动提交。然后,将其推送到另一个托管站点,从而使两者同步。
Martin Geisler 2014年

4
这对我来说非常有用,除了我需要cd cakephp在两个命令之间插入一个。对于非初学者来说是显而易见的,是的,但是初学者可能想知道为什么它不起作用。
aaronbartell

您可以为此制作youtube视频吗?我无法复制它。我能够执行这些说明,但是当我推送并提交时,它仍然尝试将其推送到master而不是fork分支。

这不能作为fork。分支和标签不会复制到BitBucket。
Joel Karunungan

81

下面的工作流将github存储库添加为名为新的远程sync,将bitbucket远程添加为origin。它还添加了一个称为githubgithub仓库的分支和一个master追踪bitbucket仓库的分支。假定您有一个名为“ myrepository”的位桶存储库,该存储库为空。

设置遥控器

# setup local repo
mkdir myrepository
cd myrepository
git init

# add  bitbucket remote as "origin"
git remote add origin ssh://git@bitbucket.org/aleemb/myrepository.git

# add github remote as "sync"
git remote add sync https://github.com/aleemb/laravel.git

# verify remotes
git remote -v
# should show fetch/push for "origin" and "sync" remotes

设置分支

# first pull from github using the "sync" remote
git pull sync

# setup local "github" branch to track "sync" remote's "master" branch
git branch --track github sync/master

# switch to the new branch
git checkout github

# create new master branched out of github branch
git checkout -b master

# push local "master" branch to "origin" remote (bitbucket)
git push -u origin master

现在,您应该让本地github分支跟踪github repo的master分支。而且,您应该让本地master分支跟踪bitbucket存储库(master默认情况下为分支)。

这样就很容易在github分支上进行拉取,然后将那些更改合并到master分支上(尽管相对于合并,首选重设基准),然后可以推送master分支(将其推送到bitbucket)。


这似乎不起作用,但这是一个好主意。反正要修复它才能使其正常工作?
bozdoz

本地github分支跟踪远程github master分支,然后您推送到远程bitbucket master?何时推送到github?@aleemb
bozdoz

1
在Git 2.2.1 --set-upstream中已弃用...但是只要您github在尝试设置上游存储库之前创建分支,此方法就可以工作。
肯王子

3
而不是--set-upstream做:git fetchgit branch --track github sync/master
Beaudinn Greve

3
我认为,现在缺少的是git checkout githubgit checkout -b mastergit的分支命令后。您将以那些分支(git branch -a)结尾:github,master,remotes / origin / master,remotes / sync / master
Klemens Zleptnig

31

如果您想使仓库保持最新状态,请使用两个遥控器:Github(upstream)和Bitbucket(origin),如下所示:

# Clone original CakePHP source code from Github
git clone --mirror https://github.com/cakephp/cakephp
cd cakephp
# Rename remote from `origin` to `upstream`
git remote rename origin upstream
# Add your Bitbucket repo (this is where your code will be pushed)
git remote add origin https://bitbucket/your/repo.git
# Push everything to Bitbucket
git push --mirror origin

要从Github中提取对CakePHP的更新:

git pull upstream master

要将代码更改推送到Bitbucket:

git push origin master

我认为您在第一个 命令中是`git clone mybitibucket / cakephp / cakephp`的意思git,对吧?这就是要走的路
。...–ribamar

太好了!万分感谢!非常感谢
Aakanksha

这也不起作用。分支和标签不包含在Bitbucket中。
Joel Karunungan

@JoelKarunungan好点!推一切,包括分支和标签,我想这应该工作:git push --all --mirror origin。答案已更新。
Zubin

@Zubin您尝试了吗?fatal: --all and --mirror are incompatible 另外:git pull upstream master引发致命错误。fatal: Couldn't find remote ref master
Joel Karunungan

15

在BitBucket中创建新存储库时,请单击右上角的按钮Import repository。输入点击时找到的https网址Clone or download在Github中要分叉的存储库。

为您的存储库命名,配置隐私设置,然后就可以了!


1
那是克隆,而不是分叉,这是另一回事。

7
到目前为止,该功能在Bitbucket上被标记为“导入存储库”。
Wild Pottok

1
@entropid fork是原始仓库的克隆。在git世界中,分叉==克隆
enorl76 '16

@ enorl76虽然在一般用途上并不特别。
钻机

2
@ enorl76是的,从技术上来说是这样。但是fork是一种使克隆“连接”到原始存储库,以便从其中获取更新并最终推送到它的方法。在这里,“原始”链接和“上游”链接的组合起着至关重要的作用。Github和Bitbucket然后围绕上游构建了所有工具集,以使fork更加高效和友好,例如“ push request” :)
Dan Niero

1

我已经注意到,自@Martin Geisler回答以来,Bitbucket已启用一项功能,可从github.com导入存储库。

一世 能够成功地将github.com上的私有存储库导入到bitbucket.org上的私有存储库中

下面是步骤

  1. 单击创建按钮,然后选择存储库(“ +”>存储库)
  2. 现在,无需创建新的存储库,而是从弹出的模式的右上角选择导入存储库。
  3. 在用于导入存储库的新模式上填写github存储库的URL和身份验证凭据。
  4. 而已。一切都从github顺利导入了bitbucket。

注意屏幕截图右上角的导入存储库链接


0

我猜您只是想随项目轻松下载存储库...而您将不会贡献出CakePHP,对吗?

如果是这样,您只需要向您的仓库添加一个外部引用。

SVN:等同于GIT的外部对象?

然后,即使您想为cakePHP做出贡献,也可以在原始存储库中这样做就可以了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.