2011-10-11 23 views
5

Così ho creato un repository git, impostare alcuni tag e telecomandi sulla mia copia di lavoro, e poi spinto il repository al mio server conCome posso clonare un repository git e mantenere i telecomandi?

git push --mirror my.remote.repository 

Presumibilmente, spingendo con git --mirror anche spingere il telecomandi che ho impostato.

Tuttavia, se faccio

git clone my.remote.repository 

non vedo i telecomandi che ho creato in origine. Ho bisogno di una sintassi speciale per clonare anche i telecomandi? Mirror non invia effettivamente i telecomandi? Dove ho sbagliato?

Modifica: Forse il mio flusso di lavoro è strano: ecco cosa sto cercando di realizzare. Il repository è inizialmente un clone di un altro progetto (A) che non controllo, in cui ho rinominato il telecomando in "upstream". Ho creato un nuovo ramo "master" e intendo apportare modifiche alla mia copia di lavoro e distribuirli. Occasionalmente estraggo gli aggiornamenti dal repository originale (A) (passando al ramo originale, non modificato e tirando da upstream). Tuttavia, sto lavorando con altre persone, che dovrebbero essere in grado di fare anche questo. L'obiettivo è aggiornare il ramo master con correzioni di errori dal repository iniziale (A) e confermare le modifiche al ramo "master". Per questo motivo, quando uno sviluppatore clona il repository, dovrebbero ereditare il ramo upstream in modo che possano effettivamente farlo. In breve, sto cercando di utilizzare un ramo "upstream" per inserire aggiornamenti da un progetto diverso. Non ho usato un sottomodulo per fare questo poiché il ramo 'upstream' è in realtà responsabile del 95% dei file nel repository e l'intero progetto non ha senso senza i file da upstream.

+0

Forse mi manca qualcosa, ma se suona come se si avesse un ramo localmente (chiamato 'foo', dire) che si sta aggiornando da 'upstream/master'. Perché non devi semplicemente spingere quel ramo (così come il tuo 'master') in un repository nudo che le altre persone possono clonare? O lascia che clonino il tuo repository direttamente? In entrambi i casi otterranno quei rami come rami di localizzazione remota senza usare '--mirror' in qualsiasi momento. –

+0

@ mark-longair Destra, ma quelle filiali remote stanno monitorando il nostro server invece del server upstream da cui provenivano originariamente. Anche se in qualche modo utile, vuol dire che altre persone non saranno (facilmente) in grado di estrarre gli aggiornamenti da upstream (sola lettura) e quindi trasferirli sul nostro server (origine). – Zxaos

+0

Possono farlo - hanno solo bisogno di aggiungere un telecomando in più che si riferisce all'altro repository. –

risposta

2

(Questo non è un flusso di lavoro tipico, ma cercherò di rispondere alla domanda diretta in ogni caso ...)

git push --mirror sarà infatti hanno spinto tuoi rami remote-tracking per lo stesso nome sul telecomando. Tuttavia, quando si clona, ​​per impostazione predefinita si ottengono solo i riferimenti sotto refs/heads, che vengono associati ai rami di rilevamento remoto in refs/remotes/origin/. È possibile clonare con git clone --mirror per ottenere i rami di tracciamento remoto dal remoto, ma questa opzione implica --bare.

Se si desidera un repository con un albero di lavoro i cui rami sono specchiati dal remoto, è sempre possibile modificare il refspec nell'opzione di configurazione remote.origin.fetch per recuperare ogni riferimento allo stesso nome, ma di nuovo ho il sospetto che il vero problema sia che stai utilizzando un flusso di lavoro molto insolito.

Per inciso, anche se si utilizza una di quelle tecniche per modificare la mappatura dei arbitri che sono inverosimile, questo non clonare i telecomandi stessi, che sono definite in config git del repository - git clone non lo fa clone qualsiasi cosa da .git/config, che si ritiene contenga informazioni private.

+0

Ho aggiunto alcune informazioni sul mio flusso di lavoro, nel caso in cui questo aiuti a rendere questa domanda più sensata. – Zxaos

+0

Quindi questo sembra il modo per farlo. Probabilmente dovrei notare, però, che ho finito per rottamare questo flusso di lavoro e usare invece i sottomoduli. – Zxaos

Problemi correlati