Pergunta

Como você usaria Mercurial para o seguinte problema.

Suponha que eu tenho um Core biblioteca. Eu agora quero desenvolver uma extensão para que a biblioteca ramal chamado. Eu quero manter o núcleo fisicamente separada da extensão, ou seja, digamos que Core é uma biblioteca de código aberto e de extensão é uma biblioteca privada que constrói no Core (talvez ele contém algumas coisas que eu quero manter pessoal. Que seja.). Obviamente, eu não quero empurrar toda a fonte de Extensão para o repositório público cada vez. Mas por outro lado eu poderia querer empurrar certas mudanças de Extensão para o Core (se eu iria decidir "doar" parte da extensão do Core) ou vice-versa (se eu quiser incorporar correções de bugs, por exemplo).

Como você iria sobre isso, minimizando o risco de vazamento de extensão para o Core (uma vez a história é empurrado para o servidor público, não há volta vai!), Enquanto permanecer flexível para fazer isso por certas mudanças. Ramos? Clones? MQS? Algo mais?

Atualmente estou familiarizado apenas com clonagem de repositórios, e muito parecido com a sua simplicidade.

EDIT: Eu vim com esse esquema, mas eu não consigo fazê-lo funcionar no Windows. Dois repositórios (núcleo e extensão). Na extensão, há dois Ramos , também núcleo e extensão. Agora, você pode se cadastrar por gancho de um repositório no Mercurial, então eu gostaria de registrar um gancho 'pretxnchangegroup' no repo núcleo que não permite checkins do ramo de extensão, como uma espécie de explicou no livro Mercurial . Só que eu não começ completamente que, para funcionar no Windows. Assim:

  • Alguém tem um exemplo de algo assim (na verdade, qualquer gancho que muda o resultado de uma transacion) sob janelas?
  • eu ainda seria capaz de usar transplante para cherrypick alterações em relação à extensão ao ramo Core, certo?
Foi útil?

Solução

Depois de alguns testes, eu vou tentar este regime. Dois repositórios principais e dois ramos nomeados, núcleo e extensão.

Um repositório central principal, que deve conter apenas changesets núcleo e fonte. Deve, assim, conter apenas changesets do ramo Core. Este é verificada usando o seguinte gancho repositório no hgrc de que repo:

pretxnchangegroup.branch = hg heads --template "current branches: {branches} " | find "Extension" && exit 1 || exit 0

Parece um pouco estranho, mas basicamente é demitido depois de um empurrar ou puxar é concluída, mas antes de ser cometido. Nesse ponto, se o gancho falhar, a transação será revertida. Então os olhares de gancho para um conjunto de alterações do ramo de extensão e não se encontra -. Efetivamente proibindo Extensão muda para entrar no repo Núcleo

O segundo repo contém ambos os ramos e changesets núcleo e extensão, e é onde changesets se trocadas entre os dois ramos. merge normal a partir do núcleo de extensão, e transplante de Extensão para Core.

espero que isso ajude alguém.

Outras dicas

(uma vez a história é empurrado, há nenhuma parte traseira indo!)

certeza que há ... é isso que o controle de versão é toda sobre!

Eu não fiz nada como isso antes, mas parece que o comando transplante será útil. Além disso, você pode ter clones de clones e empurre a qualquer um deles, et cetera.

O Floresta extensão permite que você mantenha vários repos como parte de um grande problema. Parece que poderiam ajudar aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top