2011-11-02 15 views
8

vorrei creare la seguente configurazione per il mio repo git:git la fusione rami in un repository nudo

Al momento ho un repo git locale con tutti i miei file di lavoro. Mi piacerebbe essere in grado di configurare un repository centrale nuda e altri due repository non nudi, uno per un'applicazione live e uno per una versione di test.

Vorrei essere in grado di trasferire le modifiche da locale a repository centrale su un ramo di test. Quindi, nel mio repository di test, estrarre sempre dal ramo di test del repository nudo.

Quando sono pronto per andare a vivere con le modifiche, vorrei poter unire il mio ramo di test e il mio ramo master nel repository centrale nudo. Quindi il repo live potrebbe prelevare dal ramo principale.

Quindi in questo schema, il test repo verrà sempre estratto dal ramo di test e il repo live verrà sempre prelevato dal ramo principale.

Non riesco a capire come unire i rami in un repository nullo. git-merge e git-checkout non sembrano funzionare senza l'albero di lavoro.

Quindi, la mia domanda è duplice:

  1. C'è un modo standard per unire i rami in un repo nuda?
  2. Non è semplice perché l'impostazione dei miei repository è scadente? (In questo caso, come è possibile modificare questa architettura per le migliori pratiche?)
+0

questo è esattamente dove mi trovo, lo scenario che si descrive è il più comune. –

risposta

10

git checkout controlli su un ramo nell'albero di lavoro - come pensi che questo dovrebbe avere lavorato senza un albero di lavoro? E git merge e molti altri comandi non funzionano, perché non c'è HEAD all'interno di un repository nudo.

Per rispondere alla tua domanda: non si lavora all'interno del repository nudo. Un repository spoglio è lì solo per conservare i dati; se vuoi lavorare con esso, usa un clone che non sia nudo.

Quindi da qualsiasi altro repository, si estrae dal repository nudo, si uniscono localmente e si trasferiscono le modifiche ad esso. Dovresti farlo dal tuo repository di sviluppo btw. in modo che i repository in diretta e di prova vengano estratti solo dalla loro succursale.

+0

Grazie! Farò la fusione nel mio repository locale. – user480029

2

È necessario prima clonare dal repository nudo, unire il ramo, quindi passare nuovamente al repository. Perché non hai alcun albero di lavoro su repository nudi per risolvere i conflitti.

8

Nota, questo può effettivamente essere fatto su un repository nudo, ma è necessario aggirare l'interfaccia normale.

$ git read-tree -i -m branch1 branch2 
$ COMMIT=$(git commit-tree $(git write-tree) -p branch1 -p branch2 < commit message) 
$ git update-ref mergedbranch $COMMIT 
Problemi correlati