我有一个作为私人项目托管在bitbucket上的项目。通过修剪根项目中的许多源代码和配置,该项目现在已公开。我把公共项目放在github上。
由于它是一个内部项目,我继续以git方式处理项目,然后在github上对项目进行任何公开适当的更改。我一直在使用SVN管理两个项目,因为SVN是最初在Git之前使用的工具。当我把更多内容从内部推送到公众时,我觉得这是非常愚蠢的做法。
我认为公共项目应该是主人,因为内部项目在公共项目之上有许多新增功能,但我想远离内部项目的github。
theProject(on github)
->(branch)theProject_INTERNAL(on bitbucket)
我想继续处理'theProject_INTERNAL',只将一些更改合并到'theProject',同时保持内部项目绝对禁止公众使用。
如何在没有Git麻烦的情况下实现这一目标?
答案 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)
您可以随时拥有任意数量的公共和私人分支机构。什么使他们私密是遥控器的正确设置。
如果是一个新项目,我会做类似的事情:
在GitHub上创建公共项目
将其克隆到私人计算机(我的工作站)
提示:将“原点”重命名为其他内容,以尽量减少混淆
添加另一个遥控器:bitbucket
基于主
将分支推送到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 :
: :
'------------------------------------------------------------------------------'