3

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

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

我认为公共项目应该是主人,因为内部项目在公共项目之上有很多补充,但我想远离 github 进行内部项目。

theProject(on github)

   ->(branch)theProject_INTERNAL(on bitbucket)

我想继续在“theProject_INTERNAL”上工作,只将一些更改合并到“theProject”,同时保持内部项目绝对禁止向公众开放。

我怎样才能在不让 Git 头疼的情况下做到这一点?

4

3 回答 3

2

Use a tracking branches. Suposing master branch of BitBucket has the changes you'll release to public, on GitHub repository:

$ git checkout -b master_of_bitbucket_on_github remote_bitbucket/master

This will create master_of_bitbucket_on_github branch on GitHub repository, that will track master branch of BitBucket.

If it isn't done, you'll need to configure remote branch remote_bitbucket.

Or you can do the opposite: create a tracking branch on BitBucket repository tracking a branch of GitHub if you want no reference to your private repository on GitHub repository.

于 2013-07-17T18:25:26.217 回答
0

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

如果这是一个新项目,我会这样做:

  1. 在 GitHub 上创建公共项目

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

    提示:将“原点”重命名为其他名称以最大程度地减少混淆

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

  4. 基于master创建本地分支

  5. 将分支推送到 bitbucket

(我为我的 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                                          :
:                                                                              :
'------------------------------------------------------------------------------'
于 2013-07-17T17:48:10.590 回答
0

在单独的 INTERNAL 功能分支上开发每个功能(您只需将其推送到那里),当您觉得您的代码适合公共分支上的公共 rebase 时(请参阅: http: //git-scm.com/ book/de/Git-Branching-Rebasing ) 并推送

好处是,您不需要推动所有事情..并且您可以在公开做某事之前在本地进行试运行..

但我不明白的是,你需要 svn 做什么?(这很好,因为无论如何 svn 真的很糟糕)

于 2013-07-17T17:38:17.907 回答