2012-05-15 18 views
5

Ho un repository su github, ad esempio testrepo. Ora mi piacerebbe creare un repository locale repo che abbia un ramo origin-master dove voglio essere in grado di modificare le cose dal repository.Informazioni su git: collegare il ramo a un repository remoto

repo/origin-master <--------> origin/master 

La clonazione funziona bene:

mkdir repo && cd repo && git init 
# not necessary of course: 
echo "master" > master && git add master && git ci -m "master" 
git remote add origin [email protected]:<username>/testrepo.git 
git fetch origin 
git branch --set-upstream origin-master origin/master 
git checkout origin-master 
# create a new file: 
echo "for origin-master" > orig-master && git add orig-master && git ci -m "orig-master" 

ma

git push origin 
To [email protected]:<username>/testrepo.git 
! [rejected]  master -> master (non-fast-forward) 
error: failed to push some refs to '[email protected]:<username>/testrepo.git' 
To prevent you from losing history, non-fast-forward updates were rejected 
Merge the remote changes (e.g. 'git pull') before pushing again. See the 
'Note about fast-forwards' section of 'git push --help' for details. 

Come posso dire a git che se voglio spingere per origine, voglio spingere la sezione locale origin-master a origin/master?

+0

Mostra la sequenza che non funziona, non quella che funziona. – jthill

risposta

2

Imposta comportamento predefinito spinta a monte:

$ git config push.default upstream 
$ git push origin 

git push origin è lo stesso di git push origin :, che spinge tutti i rami "matching" per impostazione predefinita. Il tuo ramo principale di origine non corrisponde, quindi prova a prendere il ramo che corrisponde a corrispondere a (master) e inviarlo all'origine.

In alternativa, è possibile specificare le push refspecs su una base per-remote:

$ git config --add remote.origin.push origin-master:master 
$ git push origin 

Vedi anche git-push examples e git-config.

4

Vedere this post per un buon consiglio di push a un repository non nuda (cioè con copia di lavoro). Fondamentalmente quello che succede qui è che quando si spinge in questo modo, il repository remoto non aggiorna la sua copia di lavoro (i file reali), ma solo la sua cronologia. È quindi necessario git reset --hard per aggiornare i file, ma è pericoloso poiché si perdono modifiche non impegnate.

Come consiglio generale, preferirei pull to push quando si utilizzano più repository non nudi: push to only bare repositories!

+0

OK, questo è un buon consiglio, lo farò. – topskip

Problemi correlati