如何将您自己的个人 GitHub 仓库克隆 ('fork') 到单独的新分支中的新仓库?
How to clone ('fork') your own personal GitHub repo to a new repo in a separate, new branch?
我有一个个人 GitHub 存储库,我想将其用作新项目 = 其他存储库的起点。这对你来说可能很容易,但我真的是一个初学者,所以我希望你能帮助我。
如果我对该脚手架回购进行更改,我需要选择 merge/rebase 将它们添加到源自它的项目中。因此 GitHub 模板回购无法解决问题。
我正在考虑以下解决方案:
- 我有一个模板仓库
username/template-repo
- 创建一个空的 repo(手动或通过
git clone
)
- 创建一个新的空分支
scaffold
(所以我们有 main
和 scaffold
)
- 执行
git remote add
,使 scaffold
分支 完全包含 template-repo
的内容
- 将本地
scaffold
合并或变基到 main
分支
- 在
main
分支工作并提交。
如果我想获取 template-repo
的新内容,我会这样做:
- Git 将
template-repo
拉入 scaffold
分支
- 将
scaffold
分支与 main
分支合并或变基
我明白 Git 是如何工作的,我知道我需要什么,但我只是很难设置这一切。如果您能指出我将如何做到这一点,我将不胜感激。
非常感谢!
如评论中所述,您混淆了术语。 repository/fork 无法“压缩”到单个分支中。不过,我认为你的解释足够清楚,可以回答你的问题。
您可以配置多个遥控器,这似乎是一个很好的用例。它有点类似于在分叉另一个存储库时设置 upstream
存储库。您基本上拥有一个 template
存储库,而不是 upstream
。许多相同的概念都适用,因为分支应该从 upstream/template 存储库中获取更改。
设置 可能是这样的:
克隆时,您为远程存储库指定名称 template 而不是 origin:
git clone -o template <repository> <directory>
# example: git clone -o template https://.../username/template-repo.git project-dir
为项目本身添加远程仓库并推送所有分支:
git remote add origin https://.../username/project-repo.git
git push origin --all
跟踪 origin
上的 main
分支(而不是 模板 ):
git push -u origin main
在模板仓库中设置跟踪远程分支的本地分支(仅在稍后使用update-option B时需要):
git branch --track scaffold template/main
可选地,覆盖模板存储库的推送URL,这样您就不会不小心从项目存储库推送到那里:
git remote set-url --push template do-not-push
正在更新 项目存储库,其中包含来自模板存储库的更改[选项 A]:
获取模板存储库以进行最新更改:
git fetch template
将template/main
的更改合并到当前分支*:
git merge template/master
*请注意,当前分支可以直接是您项目的 main
分支或将用于首先测试所有内容(推荐)然后合并到 main
的另一个分支稍后——也许有一个拉取请求。
正在更新 项目存储库,其中包含来自模板存储库的更改[选项 B]:
设置远程跟踪分支后scaffold
(请参阅设置中的第 4 步),您可以检查并提取更改:
git checkout scaffold
git pull
合并 scaffold
到所需的分支。这可能是 main
或您首先集成和测试更改的另一个分支(推荐)。
我有一个个人 GitHub 存储库,我想将其用作新项目 = 其他存储库的起点。这对你来说可能很容易,但我真的是一个初学者,所以我希望你能帮助我。
如果我对该脚手架回购进行更改,我需要选择 merge/rebase 将它们添加到源自它的项目中。因此 GitHub 模板回购无法解决问题。
我正在考虑以下解决方案:
- 我有一个模板仓库
username/template-repo
- 创建一个空的 repo(手动或通过
git clone
) - 创建一个新的空分支
scaffold
(所以我们有main
和scaffold
) - 执行
git remote add
,使scaffold
分支 完全包含template-repo
的内容
- 将本地
scaffold
合并或变基到main
分支 - 在
main
分支工作并提交。
如果我想获取 template-repo
的新内容,我会这样做:
- Git 将
template-repo
拉入scaffold
分支 - 将
scaffold
分支与main
分支合并或变基
我明白 Git 是如何工作的,我知道我需要什么,但我只是很难设置这一切。如果您能指出我将如何做到这一点,我将不胜感激。
非常感谢!
如评论中所述,您混淆了术语。 repository/fork 无法“压缩”到单个分支中。不过,我认为你的解释足够清楚,可以回答你的问题。
您可以配置多个遥控器,这似乎是一个很好的用例。它有点类似于在分叉另一个存储库时设置 upstream
存储库。您基本上拥有一个 template
存储库,而不是 upstream
。许多相同的概念都适用,因为分支应该从 upstream/template 存储库中获取更改。
设置 可能是这样的:
克隆时,您为远程存储库指定名称 template 而不是 origin:
git clone -o template <repository> <directory> # example: git clone -o template https://.../username/template-repo.git project-dir
为项目本身添加远程仓库并推送所有分支:
git remote add origin https://.../username/project-repo.git git push origin --all
跟踪
origin
上的main
分支(而不是 模板 ):git push -u origin main
在模板仓库中设置跟踪远程分支的本地分支(仅在稍后使用update-option B时需要):
git branch --track scaffold template/main
可选地,覆盖模板存储库的推送URL,这样您就不会不小心从项目存储库推送到那里:
git remote set-url --push template do-not-push
正在更新 项目存储库,其中包含来自模板存储库的更改[选项 A]:
获取模板存储库以进行最新更改:
git fetch template
将
template/main
的更改合并到当前分支*:git merge template/master
*请注意,当前分支可以直接是您项目的
main
分支或将用于首先测试所有内容(推荐)然后合并到main
的另一个分支稍后——也许有一个拉取请求。
正在更新 项目存储库,其中包含来自模板存储库的更改[选项 B]:
设置远程跟踪分支后
scaffold
(请参阅设置中的第 4 步),您可以检查并提取更改:git checkout scaffold git pull
合并
scaffold
到所需的分支。这可能是main
或您首先集成和测试更改的另一个分支(推荐)。