Answers:
答案是正确的,但是没有提及如何在公共仓库和分支之间同步代码。
这是完整的工作流程(在开源React Native之前我们已经完成了此工作):
首先,按照其他人的说法复制存储库(在此处查看详细信息):
private-repo
通过Github UI创建一个新的仓库(我们称之为它)。然后:
git clone --bare https://github.com/exampleuser/public-repo.git
cd public-repo.git
git push --mirror https://github.com/yourname/private-repo.git
cd ..
rm -rf public-repo.git
克隆私人仓库,以便您可以对其进行处理:
git clone https://github.com/yourname/private-repo.git
cd private-repo
make some changes
git commit
git push origin master
要从公共回购中拉动新的热点:
cd private-repo
git remote add public https://github.com/exampleuser/public-repo.git
git pull public master # Creates a merge commit
git push origin master
太棒了,您的私人仓库现在拥有来自公共仓库的最新代码以及您的更改。
最后,要创建拉取请求私有仓库->公共仓库:
使用GitHub UI创建公共仓库的分支(公共仓库页面右上方的小“ Fork”按钮)。然后:
git clone https://github.com/yourname/the-fork.git
cd the-fork
git remote add private_repo_yourname https://github.com/yourname/private-repo.git
git checkout -b pull_request_yourname
git pull private_repo_yourname master
git push origin pull_request_yourname
现在,您可以创建公共回购通过Github上UI拉请求,如描述在这里。
项目所有者查看您的拉取请求后,便可以将其合并。
当然,整个过程可以重复(只需省去添加遥控器的步骤)。
git clone
将在您不需要的克隆存储库中设置远程跟踪分支以及其他一些配置。--bare克隆仅按原样从远程复制.git目录。
git status
显示所有最新信息,无论我如何更改,工作树都是干净的。因此,我无法提交和推送任何内容。我删除了新的私人仓库,尝试再进行两次,但仍然遇到相同的问题。有什么建议?
现在还有一个选择(2015年1月)
您必须复制回购
您可以查看此文档(来自github)
要创建存储库的副本而不进行分叉,您需要对原始存储库运行一个特殊的克隆命令,并将其镜像推送到新存储库。
在以下情况下,您要推送到的存储库(例如exampleuser / new-repository或exampleuser / mirrored)应该已经存在于GitHub上。有关更多信息,请参见“创建新的存储库”。
镜像存储库
要进行精确复制,您需要同时执行裸克隆和镜像推送。
打开命令行,然后键入以下命令:
$ git clone --bare https://github.com/exampleuser/old-repository.git # Make a bare clone of the repository $ cd old-repository.git $ git push --mirror https://github.com/exampleuser/new-repository.git # Mirror-push to the new repository $ cd .. $ rm -rf old-repository.git # Remove our temporary local repository
如果要在其他位置镜像存储库,包括从原始位置获取更新,则可以克隆镜像并定期推送更改。
$ git clone --mirror https://github.com/exampleuser/repository-to-mirror.git # Make a bare mirrored clone of the repository $ cd repository-to-mirror.git $ git remote set-url --push origin https://github.com/exampleuser/mirrored # Set the push location to your mirror
与裸克隆一样,镜像克隆包括所有远程分支和标记,但是每次提取时所有本地引用都将被覆盖,因此它始终与原始存储库相同。设置推送的URL可以简化推送到镜像的过程。要更新镜像,请获取更新并推送,这可以通过运行cron作业自动进行。
$ git fetch -p origin $ git push --mirror