分享私人回购的公共分支的确切步骤是什么?

时间:2014-07-26 00:09:22

标签: git github open-source

我想开源一堆私有代码,同时仍允许我们私下工作,与公共社区共享子集,并将社区更改纳入我们的私人仓库。我相信GitHub可以做到这一切,但我正努力让它在实践中发挥作用。你能帮我弄清楚如何使这项工作吗?

我对git / GitHub的基本流程有相当的了解,但是我不能深入研究这个练习。我已经看到了一个非常好的概述here,但它将大部分细节留作“向读者练习” - 我无法弄明白。具体来说,这就是我到目前为止所做的测试(以其他人未来参考的辉煌细节):

  1. 创建了一个新的私人仓库,只包含README.md中的Expensify/dbarrett_PrivateTest文件(无法链接到它,因为它是私有的)

  2. 在本地克隆: git clone git@github.com:Expensify/dbarrett_PrivateTest.git

  3. 创建了一个新的公共仓库:https://github.com/Expensify/dbarrett_PublicTest

  4. 在本地制作私人仓库的“裸克隆”: git clone --bare git@github.com:Expensify/dbarrett_PrivateTest.git

  5. 将其推向公众回购: cd dbarrett_PrivateTest.git git push --mirror git@github.com:Expensify/dbarrett_PublicTest.git

  6. 拉下我的公共仓库(现在很快就填充了私人提交): git clone git@github.com:Expensify/dbarrett_PublicTest.git

  7. 在公共回购中编辑README.md并推送公共提交: vim README.md git commit -a git push origin master

  8. 当我成功将公开提交推向公众回购时,我很高兴,就像我希望未来的开源贡献者一样。

  9. 在我的私人仓库中重复了(7)中的相同步骤,并成功将私人提交推送到我的私人仓库(并确认它没有出现在公共仓库中)。

    然而,就我而言,这就是我的目标。以下是我接下来要做的事情,但无法弄清楚:

  10. 将公开提交下载到我的私人仓库中,模拟我如何将公共贡献合并到我的私人代码库中。

  11. 将私人提交推送到公共回购中,模拟我如何将自己的更改贡献回社区。

  12. 我已经看到了一些比我知道如何处理(遥控器,取物等)更先进的git概念,所以我有点过头了,无法弄清楚下一步。你能提出什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:0)

如果您使用相同的本地存储库来管理私有和公共存储库,而不是将它们放在不同的本地文件夹中,则可能会更容易。您将拥有一个主分支,一个origin / master(可能是私有远程仓库)和public / master(公共远程仓库)。在私有和公共回购(master_private vs master_public)本地拥有不同的分支名称,以便在相同的回购中单独管理它们也是有意义的。

master_public跟踪公共存储库上的主分支。 master_private(或只是普通主服务器)跟踪私有存储库上的主分支。

处理第10步:

git fetch public
git checkout master_public
git merge public/master

#local master_public is now updated with 
#changes in public repository's master branch

git checkout master_private
git merge master_public
#local master_private now contains changes from public repo

git push origin master_private:master
#remote private repo now contains changes from public repo

处理第11步:

git fetch origin
#origin is the private remote name
git checkout master_private
...commit work locally or merge with feature branch ...
git push master_public:master

#remote private repo has local changes you made but public repo does not

git checkout master_public
git merge master_private
#local master_public branch has private changes
git push master_public:public

#public remote has changes from private remote now

如果您只想从私人仓库中获取更改的子集,那么这是一个不同的故事。管理将变得相当繁琐。如果你想要那个,我认为git cherry-pick会有助于http://git-scm.com/docs/git-cherry-pick