Sto cercando di mantenere una copia nuda di un repository Git e di avere alcuni problemi nel mantenere aggiornati i rami di monitoraggio remoto. Creo i rami di monitoraggio remoti, come questa:Come posso ottenere un ramo di monitoraggio remoto per rimanere aggiornato con origini remote in un repository Git spoglio?
git branch -t 0.1 origin/0.1
Questo sembra fare quello che devo fare per quel punto nel tempo. Tuttavia, se apporto le modifiche a origin
e poi recupero con il repository nudo, le cose iniziano a cadere a pezzi. Il mio flusso di lavoro è simile al seguente:
git fetch origin
Sembra che tutti i commit vengono in a quel punto, ma la mia copia locale del 0.1 non è in fase di aggiornamento. Vedo che le modifiche sono state introdotte nel repository facendo quanto segue:
git diff 0.1 refs/remotes/origin/0.1
Che cosa devo fare per ottenere la mia filiale di monitoraggio aggiornato con gli aggiornamenti del telecomando? Mi sento come se dovessi perdere un gradino o una bandiera da qualche parte.
Aggiornato: ulteriore chiarimento
Normalmente si spinge in un repository nuda, piuttosto che correre git fetch dal suo interno. Se riesci a farlo, la vita sarà molto più facile.
Ecco un po 'di chiarimenti sul flusso di lavoro.
Il repository git pubblico del progetto è ospitato su GitHub. Sto gestendo il progetto (wiki, problemi, forum) usando Redmine. Redmine richiede un repository locale per funzionare. Quando GitHub riceve modifiche, ping re Redmine. Redmine tenta quindi di recuperare le modifiche dalla sua origine (GitHub).
Questo funziona perfettamente se sto solo lavorando con il master ma non funzionava con i miei rami di monitoraggio. Le modifiche venivano importate ma non venivano elencate nel ramo nel browser del repository Redmine perché i rami locali non venivano aggiornati.
Sono sicuro che avrei potuto risolvere questo problema in un altro modo, ma trovare una soluzione (generica) per far funzionare i rami di tracciamento era decisamente la mia preferenza in quanto la maggior parte dei plugin relativi a git per Redmine si basa su cose come "git fetch origine "è tutto ciò che deve essere fatto.
Vedere la risposta accettata per la soluzione completa. La soluzione --mirror
sembra essere esattamente ciò che è necessario in questo caso.
'git merge' richiede sempre un albero di lavoro, devi usare' git update-ref' invece in un repository nudo.Penso che tu abbia ragione nel dire che uno specchio suona come una soluzione migliore. Potrebbe valere la pena aggiungere un non su 'git clone --mirror'. –
@Charles Bailey: la ragione per cui ho pensato che potesse essere un bug è che nella sorgente di builtin-merge.c c'è un commento che inizia "A questo punto, abbiamo bisogno di una vera fusione ..." dopo il punto in cui un fast- in avanti sarebbe stato fatto - non credo che l'indice o l'albero di lavoro siano necessari fino a quel momento. Comunque rimuoverò quell'osservazione. –
Si potrebbe chiedere sulla mailing list git, ma non sono convinto che sarebbe considerato un bug. Penso che, in generale, sia più coerente avere una chiara distinzione tra i comandi che non richiedono un albero di lavoro e quelli che lo fanno. Avere un comando che ha bisogno di un albero di lavoro è un'interfaccia più complessa che potrebbe causare qualche malinteso. –