Impostazione di subrepos mercuriale/forno su OSX
-
28-10-2019 - |
Domanda
Ho cercato di seguire le istruzioni nella risposta a questa domanda, usando il forno.
Vorrei poter organizzare le cose come segue:
/somepath/thirdparty
mappe a un repository di forno "terzo" e contiene codice assortito/somepath/common
mappe a un repository "comune" e contiene codice condiviso che ho scritto
e
/somepath/project1
Maps to Kiln Repository "Project1"/somepath/project1/thirdparty
mappe alla filiale di terzi sopra/somepath/project1/common
mappe al ramo di comune sopra
e
/somepath/project2
Maps to Kiln Repository "Project1"/somepath/project2/thirdparty
mappe ad un altro ramo di terzo sopra/somepath/project2/common
mappe a un altro ramo di comune sopra
L'ho scoperto quando ho creato il .hgsub
File come indicato e aggiunto/spinto al forno, non potevo più visualizzare i file del forno nel visualizzatore del file Web del forno: mostrava un messaggio oscuro sul "surriscaldamento del forno" :-) Inoltre, mentre creava automaticamente le sottocartelle all'interno Il posto corretto, non erano popolati con file, (probabilmente perché il tiro non è riuscito).
Qualcuno ha provato qualcosa di simile prima, usando il forno?
Dato che ho intenzione di sviluppare una serie di app usando il codice comune (e potenzialmente rilasciare la libreria come open source), vorrei averlo gestito in repository discreti. Poiché alcuni dei progetti sono per i clienti finali, tuttavia, devo essere in grado di dare loro un singolo repository che include le cose sopra descritte.
Soluzione
Il forno fa Attualmente non supportano subrepos che utilizzano URL nidificati sul server. Ciò significa che non puoi far funzionare entrambi i seguenti URL:
http://server/kiln/somepath/project1
http://server/kiln/somepath/project1/thirdparty
Quindi dovresti configurare il forno in modo da averlo quattro repository sul server:
http://server/kiln/somepath/project1
http://server/kiln/somepath/project2
http://server/kiln/somepath/thirdparty
http://server/kiln/somepath/common
È facile: solo quattro repository normali. Quindi clone "progetto" e crea il .hgsub
File con:
thirdparty = http://server/kiln/somepath/thirdparty
common = http://server/kiln/somepath/common
Quando lo spingi indietro in forno, noteranno e visualizzerà collegamenti per i subrepositori. Tuttavia, i subrepositori non finire per essere nidificato sul server. Quindi non ce ne sarà nessuno project1/thirdparty
Percorso sul server.
È anche tutt'altro che chiaro che lo vorresti. Quando hai diversi progetti che collaborano e utilizzano una base di codice comune, allora vuoi "Project1" e "Project2" per ottenere le reciproche modifiche a questa base di codice comune. Quindi è molto utile che il common
Subbrepo in entrambi i progetti spingono e tirano da http://server/kiln/somepath/common
.
In mercuriale, noi Normalmente raccomandare che usi percorsi della forma common = common
nel .hgsub
file. Ciò significa che il server deve supportare repository nidificati. Quando il kiln non supporta repository nidificati, è possibile utilizzare percorsi completi.
Quando inizialmente si impostano i subrepositori, ricorda che è necessario aggiornarli manualmente. Quindi, con gli URL sopra, imposteresti "Project1" eseguendo:
$ hg clone http://server/kiln/somepath/project1
$ echo "common = http://server/kiln/somepath/common" > .hgsub
$ echo "thirdparty = http://server/kiln/somepath/thirdparty" > .hgsub
$ hg commit -m "Created subrepos"
Questo crea subrepositori vuoti iniziali. Sono vuoti perché non hai detto a Mercurial quale cambio di cui hai bisogno. Questo è monitorato .hgsubstate
dove troverai:
0000000000000000000000000000000000000000 common
0000000000000000000000000000000000000000 thirdparty
Per popolare i subrepositori che fai
$ cd common
$ hg pull --update
$ cd ../thirdparty
$ hg pull --update
$ cd ..
$ hg commit -m "Updated subrepos"
Questo aggiorna il 000...
linee in .hgsubstate
con gli ID modifiche alla punta corrente per i due subrepos. I cloni futuri di "Project1" noteranno il .hgsubstate
File e assicurati di aggiornare i subrepos alla revisione menzionata lì.