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