我想更多地了解分支github项目与创建github项目分支的优缺点。
分叉使我的项目版本与原始版本更加孤立,因为我不必在原始项目的协作者列表中。由于我们正在内部开发项目,因此将人员添加为协作者是没有问题的。但是,我们想了解如果分配项目会使合并更改回主项目更难。也就是说,我想知道分支是否能让两个项目保持同步更容易。换句话说,当我分支时,在我的主项目版本和主项目之间合并和推送更改是否更容易?
答案 0 :(得分:260)
您不能总是创建分支或拉动现有分支并推回到它,因为您没有注册为该特定项目的协作者。
分叉只不过是GitHub服务器端的克隆:
通过以下方式使分叉与原始项目保持同步:
rebase允许您确保您的更改很简单(没有要处理的合并冲突),当您希望原始项目的维护者将修补程序包含在他的项目中时,使您的提取请求更加容易。
即使直接参与并非总是可行,但目标仍然是允许协作。
您在GitHub端克隆的事实意味着您现在已经两个“中央”存储库(“中央”作为“从多个协作者可见”)。 如果您可以直接将它们添加为一个项目的协作者,则无需使用fork管理另一个。
合并经验大致相同,但是有一个额外的间接水平(先推上叉子,然后要求拉动,原始仓库的进化风险使你的快进合并不快 - 再转发。)
这意味着正确的工作流程是git pull --rebase upstream
(在上游的新提交之后重新设置您的工作),然后是git push --force origin
,以便以这样的方式重写历史记录,您自己的提交始终位于顶部来自原始(上游)回购的提交。
另见:
答案 1 :(得分:60)
以下是高层差异:
答案 2 :(得分:44)
它与Git的一般工作流程有关。您不太可能直接推送到主项目的存储库。我不确定GitHub项目的存储库是否支持基于分支的访问控制,因为您不希望授予任何人推送到主分支的权限。
一般模式如下:
如果没有这个,公共项目很难让任何人直接推送自己的提交。
答案 3 :(得分:1)
Forking从现有存储库创建一个全新的存储库(只需在gitHub / bitbucket上执行git clone)
最好使用Fork:当'split'的意图是创建一个逻辑上独立的项目时,它可能永远不会与其父项重新组合。
分支策略在现有/工作存储库
上创建新分支最好使用分支:当它们被创建为临时位置以处理特征时,意图将分支与原点合并。
更具体: - 在开源项目中,它是存储库的所有者,它决定谁可以推送到存储库。但是,开源的想法是每个人都可以为项目做出贡献。
这个问题由fork解决:只要开发人员想要在开源项目中更改某些内容,他们就不会直接克隆官方存储库。相反,他们将它分叉以创建副本。工作完成后,他们会发出拉取请求,以便存储库的所有者可以查看更改并决定是否将它们合并到项目中。
其核心分支与功能分支类似,但不是创建分支,而是创建存储库的分支,而不是执行合并请求,而是创建拉取请求。
以下链接以一种解释清楚的方式提供了不同之处:
https://blog.gitprime.com/the-definitive-guide-to-forks-and-branches-in-git/