【问题标题】:How to clone ('fork') your own personal GitHub repo to a new repo in a separate, new branch?如何将您自己的个人 GitHub 存储库克隆(“分叉”)到单独的新分支中的新存储库?
【发布时间】:2021-08-22 07:47:05
【问题描述】:

我有一个个人 GitHub 存储库,我想将其用作新项目 = 其他存储库的起点。这对你来说可能很容易,但我真的是一个初学者,所以我希望你能帮助我。

如果我对该脚手架 repo 进行更改,我需要选择将它们合并/重新定位到源自它的项目中。所以 GitHub 模板 repo 将无法解决问题。

我正在考虑以下解决方案:

  1. 我有一个模板仓库username/template-repo
  2. 创建一个空的仓库(手动或通过git clone
  3. 创建一个新的空分支 scaffold(所以我们有 mainscaffold
  4. 执行git remote add,以便scaffold 分支完全包含template-repo 的内容
  5. 将本地 scaffold 合并或变基到 main 分支
  6. main 分支中工作并进行提交。

如果我想获取template-repo的新内容,我会这样做:

  1. Git 将template-repo 拉入scaffold 分支
  2. scaffold 分支与main 分支合并或变基

我了解 Git 的工作原理,也知道我需要什么,但我很难设置这一切。如果您能指出我将如何做到这一点,我将不胜感激。

非常感谢!

【问题讨论】:

  • 您不能将 repo 分叉到分支中。您似乎混淆了术语。
  • GitHub 支持templare repositories
  • @Flimzy 感谢您指出这一点。你当然是对的。我的意思是类似于在它们之间分叉和执行拉取请求的功能。
  • 感谢@dan1st,但是模板存储库只是另一个存储库的起点,它不允许您将模板存储库中的更改合并或重新设置到源自它的存储库中。

标签: git github git-branch git-remote repo


【解决方案1】:

正如 cmets 中已经指出的那样,您混淆了术语。存储库/分叉不能“压缩”到单个分支中。但是,我认为您的解释很清楚,可以回答您的问题。

您可以配置多个遥控器,这似乎是一个很好的用例。它在某种程度上类似于在 fork 另一个存储库时设置 upstream 存储库。而不是upstream,您基本上有一个template 存储库。许多相同的概念都适用,因为分叉应该从上游/模板存储库中获取更改。


设置可能是这样的:

  1. 克隆时,您将远程存储库命名为 template 而不是 origin

    git clone -o template <repository> <directory>
    # example: git clone -o template https://.../username/template-repo.git project-dir
    
  2. 为项目本身添加远程仓库并推送所有分支:

    git remote add origin https://.../username/project-repo.git
    git push origin --all
    
  3. 跟踪origin 上的main 分支(而不是模板):

    git push -u origin main
    
  4. 模板存储库中设置一个本地分支来跟踪远程分支(仅在稍后使用更新选项B时需要):

    git branch --track scaffold template/main
    
  5. (可选)覆盖 模板 存储库的推送 URL,这样您就不会意外地从项目存储库推送到那里:

    git remote set-url --push template do-not-push
    

使用模板存储库中的更改更新项目存储库[选项 A]

  1. 获取模板存储库以获取最新更改:

    git fetch template
    
  2. template/main的变化合并到当前分支*:

    git merge template/master
    

    *请注意,当前分支可以直接是您项目的 main 分支,也可以是另一个用于首先测试所有内容(推荐)然后合并到 main 的分支 - 可能带有拉取请求.


使用模板存储库中的更改更新项目存储库[选项 B]

  1. 当您设置了远程跟踪分支scaffold(请参阅设置中的第 4 步)后,您可以检查它并拉取更改:

    git checkout scaffold
    git pull
    
  2. scaffold 合并到所需的分支中。这可能是 main 或您首先集成和测试更改的另一个分支(推荐)。

【讨论】:

  • 嗨,马特,非常感谢您的解释!这当然是有道理的。今天下午我会试一试并标记为正确(希望如此)。
  • 决定快速测试我是否可以启动并运行它,并且它有效,太棒了! ?
猜你喜欢
  • 1970-01-01
  • 2011-04-23
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 2021-11-04
  • 1970-01-01
相关资源
最近更新 更多