我正在Github上发布一个开源的Rails应用程序(可能是麻省理工学院的许可证).我还想维护项目的私有分支/分支,我们将将其用作付费服务的一部分.
在这种情况下组织回购的最佳方法是什么?而且,当我有更新应该同时进行时,如何让项目保持同步?
最简单的解决方案是在您的"私有"存储库中拥有私有分支,即只是不将其推送到公共存储库的分支.
为此,您可能需要指定要在config中推送到公共存储库的所有分支(而不是使用globbing镜像refspec +refs/*:refs/*
),或者仔细推送要发布的分支并依赖于推送匹配分支的Git行为(那些是存在于远程端)将"push.default"设置为当前默认值"匹配".
如果您偶然推送您的私有分支,您可以使用"git push < remote >:refs/heads/< private-branch >" 将其删除在远程存储库中(除非它被配置为禁止此)(要记住这一点:push empty远程分支的价值).您可以使用远程端的钩子防止意外推送您的私有分支,请参阅contrib/examples中的例如update-paranoid示例钩子.
旁注: Junio C Hamano,git维护者,推送公共git存储库只指定一组分支:'maint','master','next','pu'(建议更新)和'html','man','去做'; 他没有发表短暂的,经常变化的特征分支.
working repository ----> private repository (bare) ----> public repository \------ private -------/ \------- protected ------------/ \------- public -----/
" 工作存储库 "是具有您提交的工作区域的存储库,您可以在其中提取更改并解决冲突; 您在哪里工作.假设它包含以下分支:"公共"包含可以发布到世界的更改,"私有",您希望不与他人共享或仅与选定的人员共享,也许某些功能分支如"票证 - 234'或'add-frobnicator',即使对于选定的组也看不到.此存储库是非裸的,因为它未发布.
它将具有类似于以下配置的推送到"私有"存储库.请注意,"匹配分支"行为在此处明确设置,请参阅git-pull手册页:
[remote "private"] url = user@example.com:/srv/private/git/repo.git push = +:
" 私有存储库 "是仅供选定人员使用的公共裸存储库,例如,它仅可通过SSH获取.它只有准备就绪的分支,即"公共"和"私人"分支; 这些分支在创建"私有"存储库时存在,或者从"工作"存储库中明确地推送("git push private
"私有存储库"具有post-update
或者post-receive
挂钩集,它将"公共"分支仅推送到"公共存储库"(见下文),如果它被推送到它(好吧,它可以无条件推送).
" 公共存储库 "是可供所有人使用的公共裸存储库,例如它托管在GitHub和/或Gitorious和/或repo.or.cz上,或者它可能通过git://
使用git-daemon的协议提供.它只包含'public'分支,它使用update
或者pre-receive
接受分支的whilelist(这里只接受'public'分支),或者拒绝分支的黑名单(在这个例子中,推送/创建'private'分支将被拒绝) .推送到"私有"存储库时会自动更新.
根据您的需要,此设置可能过于复杂; 在您的情况下,可能不需要"私有"存储库.在这种情况下,"工作存储库"中用于直接推送到"公共存储库"的配置如下所示:
[repository "public"] url = ssh://example.com/srv/git/repo.git push = refs/heads/public:refs/heads/public
我希望这个例子有所帮助; 但请阅读文档,不要盲目使用.