Git:在Github上做一个分支作为主人,同时在BitBucket上保持真正的主人

时间:2013-07-17 16:34:07

标签: git github branch bitbucket master

我有一个作为私人项目托管在bitbucket上的项目。通过修剪根项目中的许多源代码和配置,该项目现在已公开。我把公共项目放在github上。

由于它是一个内部项目,我继续以git方式处理项目,然后在github上对项目进行任何公开适当的更改。我一直在使用SVN管理两个项目,因为SVN是最初在Git之前使用的工具。当我把更多内容从内部推送到公众时,我觉得这是非常愚蠢的做法。

我认为公共项目应该是主人,因为内部项目在公共项目之上有许多新增功能,但我想远离内部项目的github。

theProject(on github)

   ->(branch)theProject_INTERNAL(on bitbucket)

我想继续处理'theProject_INTERNAL',只将一些更改合并到'theProject',同时保持内部项目绝对禁止公众使用。

如何在没有Git麻烦的情况下实现这一目标?

3 个答案:

答案 0 :(得分:2)

使用tracking branches。在GitHub存储库中,对BitBucket的master分支进行了更改,你将发布给公众:

$ git checkout -b master_of_bitbucket_on_github remote_bitbucket/master

这将在GitHub存储库上创建master_of_bitbucket_on_github分支,它将跟踪 BitBucket的master分支。

如果没有完成,则需要配置remote branch remote_bitbucket

或者您可以这样做:如果您不希望在GitHub存储库中引用您的私有存储库,请在BitBucket存储库上创建跟踪分支,以跟踪GitHub的分支。

答案 1 :(得分:0)

在一个单独的INTERNAL功能分支(你只是推到那里)上开发每个功能,当你觉得,你的代码适用于在公共分支上分支的公共rebase(参见:http://git-scm.com/book/de/Git-Branching-Rebasing)和推

优势在于,您不需要推送所有东西..而且您可以在公开做错之前在本地进行干运行。

但我没有得到的是,你需要什么svn? (这很好,因为无论如何svn真的很糟糕)

答案 2 :(得分:0)

您可以随时拥有任意数量的公共和私人分支机构。什么使他们私密是遥控器的正确设置。

如果是一个新项目,我会做类似的事情:

  1. 在GitHub上创建公共项目

  2. 将其克隆到私人计算机(我的工作站)

    提示:将“原点”重命名为其他内容,以尽量减少混淆

  3. 添加另一个遥控器:bitbucket

  4. 基于主

  5. 创建本地分支
  6. 将分支推送到bitbucket

  7. (我的dotfiles集合使用了类似的系统:我有一个“私有”分支,只存在于我的工作站上的一个裸仓库中,我将它克隆到工作站和一些虚拟机。)

    工作时,您需要确定:

    • 显然,你不会意外地提交+推送私人物品 到公共部门

    • 正确设置私有分支以跟踪bitbucket远程, 不是“起源”,即GitHub

    如果您想使用不同的计算机来处理项目,请考虑创建自己的裸存储库(可能在您的专用网络中的某个位置),您可以根据需要添加任意数量的预提交检查和挂钩(您甚至可以使用grep的源代码内容)文件)。

    这样可以更轻松地在另一台计算机上部署repo,还可以帮助减少对网络的依赖或实现一些访问控制。


    这是最终的架构,包括代理:

    .------------------------------------------------------------------------------.
    :                              .                            .                  :
    :   [github.com] ----------.   .   [bitbucket.org]-.        .                  :
    :       branches:          :   .       branches:   :        .                  :
    :           master         :   .           private :        .                  :
    :                          :                       :             the internets :
    :--------------------------:-----------------------:---------------------------:
    :                          :                       :             all your base :
    :   [local_git_proxy]      '.....................  :                           :
    :       remotes:                                :  :                           :
    :           public   git://github.com/...or.so..'  :                           :
    :           private  git://bitbucket.org/...or.so..'                           :
    :       branches:                                                              :
    :           master set up to follow public/master                              :
    :           private set up to follow private/private                           :
    :           any other team branches                                            :
    :       hooks:                                                                 :
    :           hooks to prevent you from leaking data to public                   :
    :           maybe some hooks to automate pushing/fetching                      :
    :                                                                              :
    :   [actual_dev_machine]                                                       :
    :       remotes:                                                               :
    :           origin:  git://local_git_proxy/...or.so...                         :
    :       branches:                                                              :
    :           master set up to follow origin/master                              :
    :           private set up to follow origin/private                            :
    :           your own "crazy" branches                                          :
    :                                                                              :
    '------------------------------------------------------------------------------'