2013-03-04 16 views
10

Se faccio git fetch dal repository A a B, il ramo master in B non cambia - le modifiche solo remotes/origin/master e git status me lo ricordano.Quale sarebbe l'opposto di "git fetch"?

Ma ora voglio fare il contrario - aggiornamento B da A, qualcosa di simile a spingere da A:master a B:remotes/origin/master. La ragione di ciò è che questo aggiornamento avviene su ssh e la macchina A ha un'autorizzazione a chiave pubblica per la macchina B - ma non viceversa.

Come posso fare questo?

+0

molto correlata [ “push git” fare lo stesso come “git fetch” dal telecomando] (http://stackoverflow.com/q/4239064/11343) – CharlesB

risposta

9

git fetch A, eseguito da B, memorizzerà tutte le filiali correnti di A in refs/remotes/A. Dato che puoi fare praticamente tutto con refspecs, è possibile fare lo stesso per un git push, ma eseguire da A e il targeting B.

Un refspec ha due parti, separate da un punto e virgola. Nella prima parte selezioni ciò che vuoi spingere. Qui vuoi tutti i rami correnti, quindi questo è refs/heads/*.

La seconda parte è dove li memorizzerai sul telecomando; qui li vuoi memorizzare sotto remotes/A/*, quindi questo è refs/remotes/A/*.

metterlo insieme, di spingere tutte le sezioni locali a corrispondenti rami remoti con questo comando:

git push --force B refs/heads/*:refs/remotes/A/* 
Problemi correlati