2012-05-15 5 views
5

У меня есть репозиторий на github, скажем testrepo. Теперь я хотел бы настроить локальный репозиторий repo, который имеет одну ветвь origin-master, где я хочу, чтобы иметь возможность редактировать вещи из репозитория.Понимание git: подключить ветвь к удаленному репозиторию

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

Клонирование работает отлично:

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" 

но

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. 

Как я могу сказать, мерзавец, что если я хочу, чтобы подтолкнуть к зарождению, я хочу, чтобы подтолкнуть местное отделение origin-master в origin/master?

+0

Показать последовательность, которая не работает, а не та, которая делает. – jthill

ответ

2

Установите по умолчанию толчок поведение вверх по течению:

$ git config push.default upstream 
$ git push origin 

git push origin такая же, как git push origin :, который толкает все "совпадающие" ветви по умолчанию. Филиал источника-оригинала не соответствует, поэтому он пытается взять ветвь, чтобы выполнил матч (master) и надавил на исходное.

В качестве альтернативы, вы можете указать push refspecs на основе каждого удаленного:

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

Смотрите также git-push examples и git-config.

4

См. this post за полезную консультацию о том, чтобы нажать на не-голый (то есть с рабочей копией) репо. В основном, что здесь происходит, так это то, что когда вы нажимаете этот путь, удаленное репо не обновляет рабочую копию (реальные файлы), а только свою историю. Затем вам понадобится git reset --hard, чтобы обновить файлы, но это опасно, так как вы потеряете неизведанные изменения.

В качестве общего совета я бы сказал, что предпочитаю тянуть, чтобы нажимать при работе с несколькими не-голыми репозиториями: push to only bare repositories!

+0

Хорошо, это хороший совет, я сделаю это. – topskip

3

У меня проблемы с пониманием того, какой рабочий процесс вы пытаетесь настроить, но поможет ли это?

"How do you make an existing git branch track a remote branch?"

+0

Я пробовал это, но когда я нажимаю, я получаю сообщение об ошибке, см. Мой переформулированный вопрос. – topskip

Смежные вопросы