手动创建一个Git fork

时间:2015-01-03 03:59:22

标签: git github bitbucket git-fork

如果我理解分叉,它在概念上涉及以下步骤:

  1. 将源仓库镜像克隆到目标仓库
  2. 设置"上游"远程目标仓库,指向源仓库
  3. 其他一些内容,例如电子邮件订阅等(对此问题不重要)
  4. 这就是它的样子:

    Original <──upstream─── Forked
    (server)               (server)
                               ↑
                               │origin
                               │
                            (local)
    

    与克隆的主要区别在于这些步骤是服务器端,而非本地步骤。如何在git命令行上手动复制?

    这是我到目前为止所做的事情:

    1. 将源代码库克隆到本地仓库
    2. 更改&#34;来源&#34;远程指向预期的目标仓库
    3. 添加&#34;上游&#34;远程指向源仓库
    4. 在这个阶段,我已经在本地仓库上设置了所有内容。我可以使用中间本地克隆同步原始和分叉回购之间的更改。所以这就是我所拥有的:

      Original                Forked
      (server)               (server)
          ↑                      ↑
          │                      │origin
          │                      │
          └───────upstream─── (local)
      

      现在如何将此链接推送到服务器,即将原始仓库设为服务器端分叉仓库的上游远程,以匹配第一个图表?

      请注意,这个问题不是GitHub特有的 - 我可能也想用BitBucket做这个。理想情况下,我也应该可以跨站点执行此操作。我在这里已经阅读了很多类似的问题,但是没有明确的答案。

4 个答案:

答案 0 :(得分:7)

您可以在命令行上使用API​​在Bitbucket上派生项目,但至少需要对源项目的读取权限。

语法是:

curl -v --user {username}:"{password}" \
https://bitbucket.org/api/1.0/repositories/{accountname}/{repo_slug}/fork \
--data "name=mynewrepo"

e.g。

  1. 要将项目projectABC从帐户ABC分配到名为XYZ的帐户ProjectXYZ,请使用以下命令

    curl -v --user XYZ:"XYZPASSWORDXYZ" \
    https://bitbucket.org/api/1.0/repositories/ABC/ProjectABC/fork \
    --data "name=ProjectXYZ"
    

    请参阅Bitbucket documentation了解详情。

  2. 现在在本地计算机上克隆此项目,

    git clone your_target_git_repository_path
    
  3. 转到项目目录并添加指向源存储库的远程upstream

    git remote add upstream source_git_repository_path
    
  4. 现在,在任何时候从源存储库(例如从主分支)中提取更改,请使用:

    git pull upstream master
    

    并将您的本地提交推送到服务器上的目标存储库,使用:     git push origin master

  5. 当目标存储库上的更改准备好与源存储库合并时,可以从Bitbucket网站或使用Bitbucket API: Pull Request

  6. 创建Pull请求

答案 1 :(得分:1)

对于GitHub,显然您现在可以使用hub fork使用命令git clone git@github.com:some_user_or_organization/some_project.git cd some_project hub fork 执行此操作。我没有使用它,但根据文档看起来你会这样做:

origin

...你最终会得到两个遥控器:hub指向上游,一个与你的GitHub用户名相同的指向你的新叉子。 (如果function duplicateNumber(array) { var hash = Object.create(null), i, l, value; for (i = 0, l = array.length; i < l; i++) { value = array[i]; if (hash[value]) { return value; } hash[value] = true; } } console.log(duplicateNumber([3, 5, 6, 8, 5, 3])); // 5 console.log(duplicateNumber([0, 1, 2, 3, 4, 4, 5])); // 4 console.log(duplicateNumber([0, 1, 1, 2, 3, 4, 4, 5])); // 1也分别将远程名称切换为“上游”和“原点”,那将会很好,但我不认为它会这样做。)

答案 2 :(得分:0)

创建回购的本地副本的步骤 - 指向最终的分叉回购正如您详细说明的那样。

下一步是创建分叉回购。可以使用Github API从命令行完成 - 而不是git;有关详情,请参阅https://stackoverflow.com/a/2425632/429758

之后,完成手动分叉是一个简单的git push origin master

注意:Bitbucket也提供了一个REST API,允许从命令行创建forked repo。

答案 3 :(得分:0)

当您推送到fork时,请尝试以下选项: - mirror

https://git-scm.com/docs/git-push#git-push---mirror

这可能意味着您需要在克隆时指定--mirror选项以将远程控制器发送到本地存储库。

或者,您可以在回购中包含远程设置脚本,并在项目的开发人员设置手册中引用它。