手动创建一个Git fork

met*_*bed 10 git github bitbucket git-fork

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

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

这是它的样子:

Original <??upstream??? Forked
(server)               (server)
                           ?
                           ?origin
                           ?
                        (local)
Run Code Online (Sandbox Code Playgroud)

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

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

  1. 将源代码库克隆到本地仓库
  2. 将"origin"遥控器更改为指向目标目标仓库
  3. 添加指向源仓库的"上游"远程

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

Original                Forked
(server)               (server)
    ?                      ?
    ?                      ?origin
    ?                      ?
    ????????upstream??? (local)
Run Code Online (Sandbox Code Playgroud)

现在我如何将此链接推送到服务器,即将原始repo作为服务器端 forked repo 的上游远程,以匹配第一个图?

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

Nik*_*kar 9

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

语法是:

curl -v --user {username}:"{password}" \
https://bitbucket.org/api/1.0/repositories/{accountname}/{repo_slug}/fork \
--data "name=mynewrepo"
Run Code Online (Sandbox Code Playgroud)

例如

  1. 要使用名称将项目projectABC从帐户分支ABC到您的帐户,请使用以下命令XYZProjectXYZ

    curl -v --user XYZ:"XYZPASSWORDXYZ" \
    https://bitbucket.org/api/1.0/repositories/ABC/ProjectABC/fork \
    --data "name=ProjectXYZ"
    
    Run Code Online (Sandbox Code Playgroud)

    有关详细信息,请参阅Bitbucket文档.

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

    git clone your_target_git_repository_path
    
    Run Code Online (Sandbox Code Playgroud)
  3. 转到项目目录并添加upstream指向源存储库的远程,

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

    git pull upstream master
    
    Run Code Online (Sandbox Code Playgroud)

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

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

  • 如您所知,分叉由 Github 或 Bitbucket 数据库在其自己的服务器上跟踪。因此,如果您将存储库从一台服务器克隆到另一台服务器,则不会将其视为分叉。 (2认同)

dra*_*ock 5

对于 GitHub,显然您现在可以使用hubCLI命令执行此操作hub fork。我没有使用过它,但根据文档,您似乎会这样做:

git clone git@github.com:some_user_or_organization/some_project.git
cd some_project
hub fork
Run Code Online (Sandbox Code Playgroud)

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


Pra*_*thy 0

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

下一步是创建分叉存储库。Github API可以使用-not从命令行完成git;有关更多信息,请参阅/sf/answers/169794271/ 。

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

注意:Bitbucket 也提供了 REST API,允许从命令行创建分叉存储库。