“forking”的功能是否特定于github?或者是否有一个纯粹的git进程来创建可以从父级获取更新的“复制”子级存储库?如果是这样,怎么样?
编辑:我必须对git clone
所做的事情感到困惑。我的理解是git clone
是我在我的机器上执行的操作,以获取存储库的本地副本以对其进行更改,commit
和push
。我们目前正在使用gitosis托管我们的回购。所以,如果我想要一个'fork',我会在gitosis服务器本身(在原点)克隆存储库?这会创建一个新的git地址吗?
答案 0 :(得分:7)
在Github上分叉相当于一个简单的git clone
,但在fork的情况下,它更像是git clone --mirror
。
答案 1 :(得分:7)
您可能不想实际执行此操作。 git中的分支是非常好的和轻量级的,实际上没有理由不在现在的存储库中创建分支。我可以想到用gitosis存储库执行此操作的唯一原因是为了使访问控制变得有趣,如果您有一个连续部署或者从一个gitosis存储库中提取并且您想要提交相同代码的提交权限但是不要不希望他们能够写入已部署的那个。对于所有其他用途,您应该只使用git branch
创建一个分支,并在分支上完成所有工作。或者,您可能希望克隆一个github存储库,然后让团队在您的中央gitosis架构中工作。
鉴于预警,以您描述的方式创建“fork”的最简单方法是在gitosis服务器上创建一个单独的存储库。因此,使用另一个名称设置另一个存储库 - 例如,如果您的原始存储库是gitosis@server:repo1.git
,则可以在gitosis@server:repo1-fork.git
设置另一个存储库。添加您想要访问的任何用户。
然后你将克隆存储库:git clone gitosis@server:repo1.git
,它将repo的完整副本放入./repo1
。要将其从本地版本复制到分叉存储库,您可以执行git push gitosis@server:repo-fork.git --mirror
。
答案 2 :(得分:4)
无论何时git clone
存储库,您都有效地创建了一个fork。 GitHub的fork功能唯一能做的就是让克隆成为一个GitHub仓库,带有一个网页,图形和统计数据以及所有好东西。
此外,当您克隆存储库时,Git会自动使原始存储库成为默认的“上游”存储库(名为origin
的远程存储库)。所以,开箱即用的git pull
没有参数应直接从原文中拉出来。
答案 3 :(得分:3)
# clone wanted repo
git clone https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
# cd into created folder
cd ORIGINAL_REPOSITORY
# add your remote repository as origin
git remote add origin https://github.com/my_user/my_repository.git
# add original repository as upstream
git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
# when want to pull from upstream just
git pull upstream master
# when want to create upstream pull-request just
# https://git-scm.com/docs/git-request-pull
# commit-hash - from where to start pull request
git request-pull commit-hash git@github.com:my_user/my_repository.git