我想知道做一个项目的分叉和做一个项目之间的区别clone
.
如果我分叉项目,我是否只能通过GitHub发送拉取请求?
当你说你正在分叉一个存储库时,你基本上是在你的GitHub ID下创建一个存储库的副本.这里要注意的要点是,对原始存储库所做的任何更改都将反映到您的分叉存储库(您需要获取和重新绑定).但是,如果对forked存储库进行任何更改,则必须显式创建对原始存储库的pull请求.如果您的pull请求得到原始存储库管理员的批准,那么您的更改将与现有的原始代码库一起提交/合并.在此之前,您的更改将仅反映在您分叉的副本中.
简而言之:
Fork&Pull模型允许任何人分叉现有存储库并将更改推送到其个人分支,而无需访问源存储库.然后,必须由项目维护者将更改提取到源存储库中.
请注意,在分叉后,您可以在计算机上本地克隆您的存储库(您名下的存储库).对其进行更改并将其推送到分叉存储库.但是,要反映您在原始存储库中的更改,您的提取请求必须获得批准.
几个其他有趣的dicussions -
git forks实际上是git克隆吗?
如何更新GitHub分叉存储库?
基本上,是的.A fork
只是请求GitHub克隆项目并在您的用户名下注册它 ; GitHub还跟踪两个存储库之间的关系,因此您可以可视化两个项目(和其他分支)之间的提交和拉取.
您仍然可以请求人们从您的克隆存储库中提取,即使您不使用fork
- 但您必须自己处理将其公开发布的问题.或者发送开发人员补丁(请参阅git format-patch
),他们可以将这些补丁应用于他们的树
分叉项目在您的在线存储库(repo)上.
克隆项目在您的本地计算机上(我通常在分配回购后克隆).
您可以提交您的在线仓库(或在您的本地仓库上提交,然后推送到您的在线仓库),然后发送拉取请求.
项目经理可以接受它以获得他的主要在线版本的更改.
克隆是您正确复制的地方,以及存储库的两个(可能是不同的)版本之间的分离.修改一个repo时,必须使用push命令将新内容主动复制到另一个repo.并且其他回购的变化取而代之.
当您在服务器上分叉回购时,不需要重复内容,因为两个回购将使用来自同一服务器的相同[固定对象]内容."技巧"是管理不同的用户视点,以便每个用户都相信他们拥有回购的完整个人副本.在fork之间推送和提取只是更新用户的指针.
在较低级别,git在内部做同样的事情.如果你有三个不同的文件,每个文件都包含Hello World
,那么git只是'分叉'它的Hello World blob的单个副本,并根据需要在三个地方的每一个中提供它.
能够在服务器上进行分叉意味着Github的大容量存储容量平均不大,因为每个机构共享一个单独的底层存储库.
简而言之,Forking可能与"在您的GitHub ID /配置文件下克隆"相同.叉子在任何时候都比克隆好,但有一些例外,显然.与克隆的存储库不同,分叉存储库始终与原始存储库进行监视/比较.这使您可以跟踪更改,启动拉取请求,还可以手动将原始存储库中所做的更改与分叉更改.