我想了解在github项目中分叉(fork)和创建分支(branch)的优缺点。
分叉可以让我的版本与原始项目更加独立,因为我不必被添加到原始项目的协作者列表中。由于我们正在内部开发一个项目,所以将人员添加为协作者没有问题。但是,我们想了解是否分叉项目会使合并更改回主要项目变得更加困难。换句话说,我想知道分支是否使得保持两个项目同步更容易。换言之,当我创建分支时,在我的主要项目版本和主要项目之间合并和推送更改是否更容易?
您不能总是创建一个分支或拉取现有分支并将其推回,因为您未在该特定项目中注册为协作者。
分叉不过是在 GitHub 服务器端进行的克隆:
通过以下方式使 fork 与原始项目保持同步:
重新基于可以确保您的更改是简单明了的(无需处理合并冲突),这使得当您希望原始项目的维护者将您的补丁包含在他的项目中时,您的拉取请求更加容易。
目标是真正允许协作,即使直接参与并非总是可能的。
git pull --rebase upstream
(将你的工作重新基于上游的新提交),然后 git push --force origin
,以便以这样的方式重写历史记录,使你自己的提交始终位于原始(上游)仓库的提交之上。参见:Git fork is git clone?、Pull new updates from original Github repository into forked Github repository。以下是高级别的区别:
这与Git的一般工作流程有关。您不太可能直接推送到主项目的存储库。我不确定GitHub项目的存储库是否支持基于分支的访问控制,因为您不希望授予任何人例如对主分支进行推送的权限。
一般的模式如下:
如果没有这样做,公共项目很少允许任何人直接推送自己的提交。
分支(Branch)创建一个新的分支,基于现有的工作版本库
使用分支的最佳场景: 当需要创建一个逻辑上独立的项目时,可以将其与原始项目永久分离。
更加具体地说:在开源项目中,仓库的所有者决定谁可以向仓库推送。然而,开源的理念是每个人都可以为项目做出贡献。
这个问题通过 Fork 解决:开发人员想要修改开源项目中的内容时,不会直接克隆官方仓库。相反,他们会分叉(Fork)仓库以创建一份副本。完成工作后,他们会发起合并请求,以便仓库的所有者审查更改,并决定是否将其合并到他的项目中。
从根本上讲,Fork 与功能分支类似,但它不是创建分支,而是创建仓库的分支,而不是进行合并请求,你需要创建一个拉取请求。
以下链接提供了一个清晰解释:
https://blog.gitprime.com/the-definitive-guide-to-forks-and-branches-in-git/