Domanda

Come utilizzeresti Mercurial per il seguente problema.

Supponiamo di avere una libreria Core. Ora voglio sviluppare un'estensione per quella libreria chiamata Extension. Voglio mantenere Core fisicamente separato da Extension, ovvero diciamo che Core è una libreria open source e Extension è una libreria privata che si basa su Core (forse contiene alcune cose che voglio mantenere personali. Qualunque cosa.). Ovviamente non voglio spingere mai l'intera fonte in estensione al repository pubblico. D'altra parte, potrei voler spingere alcune modifiche dall'estensione al core (se decidessi di "donare" parte dell'estensione al core) o viceversa (se voglio incorporare correzioni di bug, diciamo).

Come faresti per questo, riducendo al minimo il rischio di perdite dall'estensione al core (una volta che la cronologia viene trasferita al server pubblico, non si può tornare indietro!), rimanendo flessibile per farlo per alcune modifiche. Filiali? Cloni? Mq? Qualcos'altro?

Attualmente conosco solo i repository di clonazione e mi piace molto la sua semplicità.

Modifica Ho escogitato questo schema, ma non riesco proprio a farlo funzionare sotto Windows. Due repository (core ed estensione). In Extension ci sono due branch , anche Core ed extension. Ora, è possibile registrare un hook per repository in Mercurial, quindi mi piacerebbe registrare un hook 'pretxnchangegroup' nel repository Core che non consente check-in dal ramo Extension, come spiegato nel libro Mercurial . Solo che non riesco proprio a farlo funzionare sotto Windows. Quindi:

  • qualcuno ha un esempio di qualcosa del genere (in effetti, qualche hook che cambia il risultato di una transazione) sotto Windows?
  • Sarei ancora in grado di utilizzare il trapianto per modificare i cambiamenti dal ramo Extension al Core, giusto?
È stato utile?

Soluzione

Dopo alcuni test, vado a provare questo schema. Due repository principali e due filiali denominate, Core ed Extension.

Un repository Core principale, che dovrebbe contenere solo changeset e sorgente Core. Dovrebbe quindi contenere solo changeset dal ramo Core. Questo viene verificato usando il seguente hook di repository in hgrc di quel repository:

pretxnchangegroup.branch = hg heads --template " rami correnti: {rami} " | trova " Estensione " & Amp; & amp; uscita 1 || uscita 0

Sembra un po 'strano, ma fondamentalmente viene sparato dopo che una spinta o una trazione è stata completata, ma prima che venga impegnata. A quel punto, se l'hook fallisce, la transazione viene ripristinata. Quindi l'hook cerca un changeset del ramo Extension e fallisce se lo trova, proibendo efficacemente le modifiche Extension per accedere al repository Core.

Il secondo repository contiene sia i rami Core che Extension e i changeset, ed è il punto in cui i changeset vengono scambiati tra i due rami. Unione normale da Core a Extension e trapianto da Extension a Core.

spero che questo aiuti qualcun altro.

Altri suggerimenti

  

(una volta spostata la cronologia, c'è   non tornare indietro!)

certo che c'è ... questo è il controllo della versione!

Non ho mai fatto nulla di simile prima, ma sembra che il comando trapianto sarà utile. Inoltre, puoi avere cloni di cloni e spingere verso uno di essi, eccetera.

La Estensione della foresta consente di conservare diversi repository come parte di uno grande. Sembra che potrebbe essere d'aiuto qui.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top