我可以为自己的 Github 仓库创建分支吗?

22
我的 Github 存储库称为 Programming-iOS-4-Book-Examples,因为这是我书籍 “Programming iOS 4” 中的示例代码。现在,我已经写了一本新版本的书,改名为 “Programming iOS 5”。我需要保留旧仓库和旧名称,因为网络上有很多链接指向它,并且可能有人需要旧代码。但现在,我还想要一个新的存储库和一个新的名称,Programming-iOS-5-Book-Examples,其中包含针对 iOS 5 重写的相同示例 (加上一些新内容)。
当然,我看到了这篇文章: How can I fork my own GitHub repository? 但是那里的建议是使用分支。但这对我没有用,因为我不想使用分支,因为这违背了给存储库设置可链接名称的目的。我希望公众在 iOS 4 存储库中找到我的 iOS 4 示例,在 iOS 5 存储库中找到我的 iOS 5 示例。
这似乎是使用 Fork 的完美用途,但当我按下 Fork 按钮时,什么也没发生; 显然我不能 fork 自己的存储库。
当然,我可以创建一个全新的仓库,但这意味着需要单独上传所有资源,这很不方便,因为所有内容都已经在iOS 4仓库中了。那我还需要这样做吗?

2
你是否需要提前规划 iOS 6 和 7 ...? 如果是这样的话,您会更好地通过一个单一的存储库来提供 iOS 5 及以后版本,每个主要版本都有一个分支吗? 显然,过去很难改变,但是您可以继续使下一个版本更易于管理。 - Jonathan Leffler
1
+1 让我有了全新的思路。 - matt
4个回答

21

你不能拥有两个同名的仓库,而在Github上分叉会自动转移名称,因此这就使得这种方法行不通。看起来最好的方法是在本地添加一个分支,然后将其推送到一个新的Github仓库中并使用新名称。你甚至可以保持Github仓库显示master作为分支:

git clone git://github.com/you/repo.git
git checkout -b new_book
[ create new repo on Github ]
git remote add new_origin git://github.com/you/repo.git
git push new_origin new_book:master

只需使用更合适的名称即可。您可以将更新合并到共享示例中,向新书代码添加其他示例,当您进行更改时,只需将其推送到 origin new_origin (使用上面的示例名称)。


非常感谢您的出色解释和详细说明。这让我可以在我的计算机上保留相同的存储库,这很好,但听起来我仍然需要将所有资源的副本从我的计算机推送到新的GitHub存储库,这有点遗憾(但也许是不可避免的)... - matt
Github基本上通过在其端进行分叉来执行相同的操作,您仍然拥有单独的远程,因此它几乎是相同的。您只是无法在Github上获取拉取请求和网络功能,但是看起来这对您也没有用处。 :) - coreyward
谢谢 - 这个解释正是我所需要的。我已经按照原帖作者的思路进行了思考。 - ouonomos

9

我知道这个问题有点老了,但最近我也面临了同样的问题。对我有效的方法如下:

  1. 在GitHub上创建一个new_repo。
  2. git clone new_repo
  3. cd new_repo
  4. git remote add upstream old_repo.git
  5. git pull upstream master
  6. git push origin master

我从这里得到了以上所有内容。


1
自GIT 2.9开始,您需要使用git pull upstream master --allow-unrelated-histories命令。我想建议一个编辑,但是建议编辑队列已满,所以我把它放在了评论中。 - Tess E. Duursma

3

1
读错了,很抱歉 - 但事实是你没有理解重点:我现在不能更改名称,因为旧链接会失效。 - matt
感谢;完全同意,打破旧链接是一个难以克服的问题,但也许你可以保持master分支与ios4同步,并将仓库名称保持为ios4?即使我同意这可能听起来很奇怪,但它只是一个URL... - CharlesB
你让我开始思考,也许我应该改变名称并断开旧链接。这样我就不会失去我的追随者,如果你明白我的意思的话。 - matt
2
如果您更改名称,仍然可以在古老的存储库中留下一个只包含“README.md”的存储库,指示新的存储库地址。 - CharlesB

2
最终我做了以下几件事情:
  1. 我重命名了现有的仓库。这个方法非常好用(感谢github使它变得如此简单)。别忘了编辑你自己git仓库的config文件,以保持你自己的主分支和github仓库的主分支之间的远程分支关系。

  2. 我创建了一个新的仓库,使用旧仓库的名称,只包含一个README.md文件,提供现有仓库的新URL。

因此,我没有把iOS 4书籍内容与iOS 5书籍内容分开。相反,我重新排列了原始仓库的结构,并给它一个更一般化的名称,不特定于iOS 4。并且,对旧仓库的现有链接不会断裂,因为在该URL上有一个占位符仓库,指向新仓库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接