Posso mappare filiali locali su filiali remote con prefissi diversi in git?
Domanda
Stiamo lavorando con un repository git semi-centralizzato qui dove lavoro. Ogni sviluppatore ha la sua sottostruttura nel repository git centrale, quindi è simile a questa:
master alice/branch1 alice/branch2 bob/branch1 michael/feature release/1.0 release/1.1
Lavorando localmente nel mio albero ho topic/feature
, che corrisponde a michael/feature
nella struttura centrale.
Sto usando
git push origin topic/feature:michael/feature
per inviare le mie modifiche all'albero remoto. Tuttavia, ciò è ingombrante e soggetto a errori (ad es. Omissione del nome dello sviluppatore, errori di ortografia del nome della funzione, ecc.).
Sto cercando un modo più pulito per farlo. Ad esempio, & Quot; git push
& Quot ;. Ho il sospetto che l'impostazione di un telecomando diverso con un refspec di recupero modificato lo farà, ma non sono sicuro di come farlo esattamente. Inoltre, non sono sicuro di come modificare le definizioni dei rami correnti per utilizzare il telecomando diverso.
La mia attuale .git/config
assomiglia a:
[remote "origin"] url = git://central/git/project fetch = +refs/heads/*:refs/remotes/origin/* [branch "topic/feature"] remote = origin merge = refs/heads/michael/project
Modifica: Vorrei anche applicarlo a pull / fetch. Ma branch.<name>.merge
se ne occupa?
Continuerò a ricercare questo e pubblicherò qui se trovo qualcosa, ma spero di ottenere qualche altra buona idea.
Modifica 2: Ho deciso di mantenere uguali i nomi delle filiali locali e remote. Sembra che sarà il minimo lavoro e il meno incline a problemi futuri.
Soluzione
Se puoi, ti suggerisco di usare gli stessi nomi di ramo localmente & amp; da remoto. Quindi git push
invierà tutti i tuoi rami locali ai rami corrispondenti nel repository centrale.
Per utilizzare prefissi diversi nei repository locali e remoti, è necessario aggiungere una mappatura al file di configurazione ogni volta che si crea un nuovo ramo di funzionalità. Il comando per impostare il mapping per topic / BRANCH_NAME è
git config remote.origin.push refs/heads/topic/BRANCH_NAME:michael/BRANCH_NAME
Altri suggerimenti
Nella sezione [remoto " origin "], aggiungi una riga per mappatura. Incluso da maestro a maestro.
push = refs/heads/master:master
push = refs/heads/topic/feature:michael/feature
Non sono sicuro di come farlo con il comando git-config.
Tieni presente che d'ora in poi tutti i rami vengono spinti allo stesso modo quando esegui una spinta dritta (senza parametri).
Ti andrebbe di spiegare perché non mantieni gli stessi nomi di filiale localmente e da remoto?
Puoi mappare il tuo ramo su un altro ramo di monitoraggio sul telecomando con qualcosa del genere:
git remote add heroku git@heroku.com:YOURAPPNAME.git
git checkout -b heroku -t heroku/master
La tua configurazione finisce in modo simile a quanto suggerisce @Paul (un po '" più semplice " in realtà).
Guarda questo riassunto (con alcune modifiche da me) per i passaggi di utilizzo che funzionano bene per me https: //gist.github .com / 2002048 .