Pessoal estou pensando na estrutura abaixo do HG para trabalhar internamente e poder compartilhar as alterações com a comunidade.
Basicamente são 4 repositórios (considerando o workspace do eclipse local).
Como não achei um modelo que permitisse fazer isso junto, compartilhar e ao mesmo tempo ter customizações próprias optei por esse caminho.
Qualquer sugestão, comente
A ideia consistem em ter um branch revision-5.1 (abaixo de lbr-5.1) que poderia ter no fork do bitbucket (se isso for aceito) para submeter sugestões para avaliação do projeto.
Na estrutura interna (server interno) abaixo do lbr-5.1 um branch hom-.5.1 e abaixo dele um branch des-5.1
As alterações(revisões) entre a branch hom-5.1 e a branch revision-5.1 seriam copiadas somente quando de interesse da comunidade e então lançadas para cima no processo, chegando ao fork.
Assim as revisões aceitas e não aceitas pela comunidade ficam registradas e se pode manter uma ideia pelo bitbucket do quanto a versão interna pode estar diferente da comunidade, fora as alterações não compartilhadas por algum motivo.
0) Nuvem iDempiereLBR (projeto da comunidade )
| default
| Branch: lbr-5.1
|--------------------------------------------------------------------------------------------------------------------------------------------------
|1)Nuvem -> Fork iDempiereLBRSuggest (meuuser) repositório privado, publicável
| | default
| | Branch: lbr-5.1
| | | Branch: revision-5.1
|
| Motivo: Fazer sugestões para comunidade e controlar as sugestões aceitas ou não em um branch chamado revision-5.1.
| Dessa forma ao fazer o (pull, update, commit) as sugestões aceitas deve voltar em lbr-5.1 ou em default
V---------------------------------------------------------------------------------------------------------------------------------------------------
||2)ServerInterno -> Clone iDempiereLBRComunidade { hg clone --verbose https://meuuser@bitbucket.org/meuuser/idempierelbrsuggest Z:/mercurial/iDempiereLBRComunidade} || | default
|| | Branch: lbr-5.1
|| | | Branch: revision-5.1 - default
||
|| Motivo: Manter uma posição interna com a posição mais atual da comunidade e servir de intermediário para saber o que foi alterado pela comunidade ou não
|| Recebe alterações da comunidade encaminha sugestões através da branch revision-5.1 para o fork da comunidade
|| hg update lbr-5.1
|| hg update revision-5.1
|| hg push -b . (Faz o push para o fork)
||
VV|-------------------------------------------------------------------------------------------------------------------------------------------------
|||3)ServerInterno -> Clone iDempiereLBRInterno { hg clone Z:/mercurial/iDempiereLBRComuninade Z:/mercurial/iDempiereLBRInterno}
||| | default
||| | Branch: lbr-5.1
||| | | Branch: revision-5.1
||| | | Branch: hom5.1 - default
||| | | Ex.: hg par (default); hg update lbr-5.1; hg par (lbr-5.1); hg branch hom-5.1; hg commit -m "hom-5.1"; hg par (hom-5.1);
||| | | | Branch: des-5.1
||| Motivo: Repositórios interno de produção, NUNCA será feito merge hom-5.1 com lbr5.1.
||| Sugestões internas serão encaminhadas com os comandos:
||| hg update revision-5.1
||| hg graft --edit {NroRev} Copia uma revisão especifica para a branch corrente (no caso revision-5.1)
||| hg push -b . (Faz o push para o clone ServerInterno Comunidade)
|||
||| Para enviar de des-5.1 para hom-5.1 (merge local em ServerInerno) ;
||| Tags são usadas em hom-5.1 para rotular versões em produção, tipo pro-5.1.nrorevisao
VVV|------------------------------------------------------------------------------------------------------------------------------------------------
||||4)Eclipse Local Workspace -> Clone iDempiereLBRInterno5.1 { hg clone Z:/mercurial/iDempiereLBRInterno#des-5.1 C:/mercurial/iDempiereLBRInterno5.1Des}
|||| Branch: des-5.1 *default
||||
|||| Motivo: Repositórios local do desenvolvedor nunca terá acesso a merge local pois já é o próprio trunck;
|||| Push do des-5.1 para o ServerInterno(iDempiereLBRInterno) para compartilhar desenvolvimento com outro desenvolvedor quando testado na máquina local.
|||| Obs: push não serve de backup nesse caso de uso, push é usado para controlar entregas de software aqui.