【问题标题】:How can I fork my own GitHub repository?如何分叉我自己的 GitHub 存储库?
【发布时间】:2010-09-22 18:56:21
【问题描述】:

所以,Git 的新手。一直在阅读指南,并认为我具备基础知识,但在实现这一目标时遇到了困难。

我为我的通用标记源代码创建了一个存储库。只是我在每次突破时重复使用的东西。它叫markupDNA.git

我想在我的 mac 站点目录 ~/Sites/project-N 中有不同的目录。我建立在通用的东西上并做一个网站的突破。我希望将这些作为分叉绑定到我的主要 git 存储库,但您不能分叉自己的存储库?

我希望我能做这样的事情:

git clone <url> name
git add .
# make changes
git commit -m 'whatever'
git push

但我不希望它推到原点。我希望它推送到克隆它的markupDNA repo 的一个分支。但似乎它只是将我的更改直接推送到原始主机。这样做的目的是保持markupDNA 干净,并为我的不同项目提供很多分支,每个项目在我的硬盘驱动器上都有自己的克隆目录。

有什么想法吗?

【问题讨论】:

标签: git github git-fork


【解决方案1】:

你做对了。

cd ~/Sites/
git clone ~/Dev/markupDNA/ project-N
cd project-N
git remote rename origin markupDNA
  • 导航到您存储项目的文件夹
  • 使用自定义名称克隆您的基础 markupDNA 存储库
  • 重命名遥控器,以便以后如果您想“起源”,您可以

【讨论】:

  • 这正是我使用我的骨架应用程序所需要的。为每个使用骨架应用程序的项目创建一个分支会很疯狂......这样,我仍然可以从骨架中提取更新
  • 当您需要使用骨架应用程序中的更改进行更新时,您可以使用git pull MarkupDNA master
【解决方案2】:

使用branches 可能比使用单独的分叉要容易得多。您仍然可以为每个分支单独结帐;只需多次克隆您的存储库,并在每个存储库中使用git checkout 将其切换到适当的分支(或使用git checkout -b 创建分支并一次性检查出来)。创建分支后,您可以使用 git push origin &lt;branchname&gt; 将它们推送到 GitHub。

【讨论】:

  • 这似乎是一个很好的方法。但是当我克隆我的 repo 时,创建一个新分支,从该分支进行编辑并尝试执行“git push git@github.com:rorourke/markupDNA.git”,该分支没有出现在 github 上?
  • 您需要执行“git push origin ”来在远程创建新分支。我很惊讶你引用的命令没有给出错误,或者是吗?
  • @Fuego 正如 ebneter 所说,在将新分支推送到 GitHub 时,您需要指定要推送的分支名称。
  • 如果您想使用多个签出,您应该使用--shared 选项从第一个复制后续副本。此选项将使用第一个存储库中的对象,从而避免您在磁盘上有两个副本。阅读有关它的手册页!
  • 使用分支不是一回事。事实上,这只是部分解决方法,因为您不能使用单独的问题和单独的 wiki。
【解决方案3】:

This tutorial 给出了一个简单直接的答案:

  1. 新建一个空githubforkedreporepository
  2. 在本地克隆它:

    git clone https://github.com/YOURUSERNAME/forkedrepo.git
    
  3. 将原始 github 存储库添加为新本地存储库的远程:

    git remote add upstream https://github.com/YOURUSERNAME/originalrepo.git
    
  4. 将原始 github 存储库的副本下拉到您的新本地存储库:

    git pull upstream master
    
  5. 将文件从新的本地存储库推送到新的 github 存储库:

    git push origin master
    

这当然不会被 github 识别为原始存储库的一个分支,但这已经足够了。

【讨论】:

    【解决方案4】:

    很惊讶还没有人引用这个人的blog post

    以下是相关步骤:

    $ git clone git@github.com:YOURNAME/foo.git bar
    $ cd bar
    $ vim .git/config
    [remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = git@github.com:YOURNAME/bar.git #replace foo with bar
    $ git remote add upstream git@github.com:YOURNAME/foo.git
    $ git push -u origin master
    

    我通常不编辑配置,而是使用git remote removegit remote add 的组合。

    如果您想保留上游来源,也可以使用git remote rename,后跟git remote add

    【讨论】:

    • 只是好奇,但你为什么要 fork 自己的项目?
    • 一个原因是如果您要清理它但想要记录旧历史。例如,删除大量旧分支和标签。
    • 当已经有 git 命令进行适当的编辑时使用 vim 有点傻:$ git clone git@github.com:YOURNAME/foo.git bar$ cd bar$ git remote rename origin upstream$ git remote add origin git@github.com:YOURNAME/bar.git,然后是$ git push -u origin master
    • @B.Garvin 也有同样的想法。如果您愿意,请随时编辑我的答案。
    • @funroll 哇,我想我一定没有仔细阅读,因为,是的,你已经在我的评论中说了一切。对此感到抱歉。
    【解决方案5】:

    要创建真正的 GitHub fork 自己的存储库,您可以使用以下步骤:

    1. 创建组织
    2. 分叉到组织
    3. 重命名分叉项目
    4. 移回您的帐户

    【讨论】:

    • 当我将所有权“转让”给自己时,我得到“rdp 已经在 rdp/screen-capture-recorder-to-video-windows-free 网络中有一个 repo”。但是我可以使用在组织中找到的副本,谢谢!
    • 是的,我遇到了同样的错误......我什至无法在重命名后将分叉的项目分叉回我自己。希望我能让 GitHub 以某种方式“忘记”它是一个分支……
    • 你能详细说明如何使用git pull-rebase upstream master我不明白。帖子中的此方法在尝试 4. move back to your account 时抛出错误
    • 是的,似乎这种方法在 github 中不再有效。使用“fork in git”我想说你可以推送到另一个远程/存储库,但它不会是 github 术语的 fork。
    • 对于私人仓库,这不起作用,当试图将其移回时...“此仓库不可转让。请联系根仓库的所有者”
    【解决方案6】:

    当然可以从克隆中克隆。在 git 中没有主仓库的概念。人们经常指定一个主仓库,但这是按照惯例,而不是出于技术原因。

    因此,您可以完全按照您的描述进行所有操作,甚至更多。

    例如,在您的突破站点中保留一个分支是有意义的,其中包含对您的通用内容进行添加或修改的想法。您可以将它们拉到您的通用存储库中并从那里再次分发。

    【讨论】:

      【解决方案7】:

      您也可以使用Github's import tool

      (它是为从 SVN 等导入而制作的,但你也可以使用它)

      • 在 Github 中创建新的存储库。 重要提示:不要“使用 README 进行初始化”
      • 在下一个屏幕上单击“导入代码”
      • 将 URL 粘贴到您要导入的 Github 存储库。 (screenshot)

      同样,这是在创建一个新的存储库,而不是 Github 上的真正分支。但是你所有的分支、历史等都会在那里。

      【讨论】:

      • 这比其他所有选项都容易。
      猜你喜欢
      • 2021-05-26
      • 2017-03-09
      • 2014-11-25
      • 2013-02-05
      • 2021-08-22
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      相关资源
      最近更新 更多