【问题标题】:Manually create a Git fork手动创建 Git fork
【发布时间】:2015-03-01 08:10:56
【问题描述】:

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

  1. 将源代码库镜像克隆到目标代码库
  2. 在目标存储库上设置一个“上游”远程,指向源存储库
  3. 其他一些东西,比如电子邮件订阅等(对于这个问题并不重要)

看起来是这样的:

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

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

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

  1. 将源代码库克隆到本地代码库
  2. 将“原点”遥控器更改为指向预期的目标存储库
  3. 添加一个“上游”远程指向源代码库

在这个阶段,我已经在本地存储库中设置了所有内容。我可以使用中间本地克隆在原始存储库和分叉存储库之间同步更改。所以这就是我所拥有的:

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

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

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

【问题讨论】:

    标签: git github bitbucket git-fork


    【解决方案1】:

    您可以在 Bitbucket 上使用他们的 API 在命令行上创建一个项目,但您至少需要对源项目的读取权限。

    语法是:

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

    例如

    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 起源大师

    5. 当您对目标存储库的更改准备好与源存储库合并时,从 Bitbucket 网站或使用Bitbucket API: Pull Request创建一个拉取请求

    【讨论】:

    • 有没有办法做这个跨站点,例如将 Bitbucket 存储库分叉到 GitHub?
    • 检查Forking from GitHub to Bitbucket 但相反我还在github gist 上找到了一个不错的教程
    • 这些都是基于本地的方法——同步是使用中间本地克隆完成的,如我的第二张图所示。我正在寻找服务器端解决方案。
    • 如您所知,分叉由 Github 或 Bitbucket 数据库在其自己的服务器上进行跟踪。因此,如果您将存储库从一台服务器克隆到另一台服务器,它将不会被视为分叉。
    【解决方案2】:

    对于 GitHub,显然您现在可以使用 hub CLI 和命令 hub fork 来执行此操作。我没有使用它,但根据文档看起来你会这样做:

    git clone git@github.com:some_user_or_organization/some_project.git
    cd some_project
    hub fork
    

    ...你最终会得到两个遥控器:origin 指向上游,一个与你的 GitHub 用户名同名,指向你的新分支。 (如果hub 也将远程名称分别切换为“upstream”和“origin”,那就太好了,但我认为不会。)

    【讨论】:

      【解决方案3】:

      当你推送到你的 fork 时,试试这个选项:--mirror

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

      这可能意味着您还需要在克隆时指定 --mirror 选项,以便将远程服务器获取到您的本地存储库。

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

      【讨论】:

        【解决方案4】:

        创建存储库的本地副本的步骤 - 指向最终的分叉存储库,正如您所详述的那样。

        下一步是创建分叉的存储库。可以使用Github API 从命令行完成,而不是git;请参阅https://stackoverflow.com/a/2425632/429758 了解更多信息。

        之后直接git push origin master即可完成手动分叉。

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

        【讨论】:

        • 有没有办法做这个跨站点,例如将 Bitbucket 存储库分叉到 GitHub?
        猜你喜欢
        • 2020-12-06
        • 2014-07-20
        • 2019-07-19
        • 1970-01-01
        • 2014-12-16
        • 1970-01-01
        • 2020-05-05
        • 2021-03-01
        • 1970-01-01
        相关资源
        最近更新 更多