2013-07-31 3 views
0

Скажем, я нахожусь в дороге с другом, мы в автономном режиме из готического хранилища git. У меня есть рабочая копия (с папкой .git), и мой друг хочет помочь мне, поэтому он клонирует мой репозиторий git из моей рабочей копии и работает сам по себе, и, конечно, обе копии - это проверка, так что в принципе я не могу совершить и он не может толкать, пока один из нас не сделает ветку. Есть лучший способ сделать это? есть ли способ не иметь наш местный мастер-контроль? Я предполагаю, что я всегда могу создать голый git локально, и мы оба можем указать на него, но это похоже на убийство. Цель состоит в том, чтобы он легко сменил свое изменение на мое, а затем, когда я буду в сети, я все это сделаю.Git on the road - push error '[remote reject] master -> master (ветвь в данный момент вычеркнута)'

+0

Возможно, связано или повторяется: [Git push error '\ [remote reject \] master -> master (ветвь в настоящий момент выгружена)'] (http://stackoverflow.com/questions/2816369/git-push-error -Дистанционный отклоненный-мастер-мастер Гис-это-настоящее время проверяется). –

+0

Как возможно, что ни один из вас не может совершить ваши собственные местные клоны? Вы имеете в виду, что ни один из вас не может *** подтолкнуть *** изменения друг к другу? В Git есть две разные вещи. Подробности важны! Кроме того, что вы имеете в виду, когда ваш друг «клонирует вашу рабочую копию»? Вы не можете клонировать Git repo из рабочей копии, потому что они не содержат истории, вы можете клонировать только из других репозиториев. Пожалуйста, уточните свой вопрос. –

+0

спасибо Cupcake, моя рабочая рабочая копия сделана из моей рабочей копии git-репозитория. Поэтому я не могу совершить, и он может совершить, но он не может нажать на мой рабочий репозиторий git-копии (удаленный для него), так как оба являются checkout, поэтому мы можем заставить его работать так, как указано, создавая ветку, но это кажется немного излишним. Есть ли способ не иметь мою локальную копию рабочей копии? В то же время мы пытались хорошо работать, но также немного переусердствовали, чтобы создать голый репозиторий на моем ноутбуке, и он и я создаем клон git оттуда ... но это немного избыточно. – wily

ответ

2

Есть некоторые недостающие вопросы, но я попытаюсь ответить в любом случае. Прежде всего, если у вас есть собственные копии репо, вы оба должны иметь возможность вносить изменения в свои локальные копии.

Если ваш друг пытается подтолкнуть свои изменения к местному репо, похоже, что он не работает, потому что у вас в настоящее время есть master, что имеет смысл в качестве функции безопасности ... вы не хотели бы иметь Гит молча заменит вашу рабочую копию прямо под носом без предупреждения. Вы можете позволить Git переместить master ответвление/ссылку/метки/указатель, проверяя фиксации его на непосредственно:

$ git checkout head 

Тогда ваш друг будет, вероятно, сможет протолкнуть свои изменения в свой репозиторий. После того, как он сделал, убедитесь, что проверка на master филиал снова в вашем репо (если вы хотите работать на нем):

$ git checkout master 

Однако люди обычно не толкать изменения в личных/частных РЕПО других людей. Обычно они отправляют друг другу запросы на тягу, а fetch - изменения друг друга. Таким образом, вы могли бы добавить ваш друг отдаленные и fetch его изменений, а затем merge их (или pull сделать оба):

$ git add <friend name> <url or path to friend remote> 

$ git fetch <friend remote> 
$ git merge <friend>/master 

# Or combine fetch and merge using pull 
$ git pull <friend> master 

В качестве альтернативы, вместо извлечения и слияния (или вытягивать) изменения вашего друга в вашу локальную master отрасли вы можете перебазироваться локальные изменениями на вершине его изменения:

$ git fetch <friend remote> 
$ git rebase <friend>/master master 
+0

точно, есть ли способ, чтобы мой местный мастер не проверил? так что мой друг может нажать, тогда я сделаю попытку и совершу .... спасибо, я попробую все решения, которые вы предлагаете, чтобы посмотреть, что является самым простым рабочим решением - еще раз спасибо. – wily

+0

Спасибо Cupcake все хорошо работает с 2 решения, которые вы предлагаете. – wily

+0

Думаю больше об этом Я могу пойти с созданием голого репозитория (решение Себастьяна) в случае, если кто-то еще добавит .... думал, что я всегда могу добавить дополнительный удаленный репозиторий друзей, если захочу ... wow git действительно универсален. (все еще учись, извините, если мои вопросы не всегда были предельно ясными) – wily

1

Просто не используйте push. Добавьте друг друга как удаленный и используйте git fetch/merge, cherry-pick, rebase или все, что вам подходит, чтобы вкладывать друг в друга вклады.

+0

отлично работает - спасибо! – wily

1

@ ответ кекса в порядке, но нет ничего излишества о создании голого репо на вашей машине, которая действует в качестве центрального удаленного хранилища для вас и твой друг. Это на самом деле намного проще и делает жизнь легче, когда его установки:

Подготовьте новый голый репозиторий

mkdir newrepo 
cd newrepo 
git init --bare 

Назад к существующему репо:

git remote add new_repo_alias /path/to/newrepo 
git push new_repo_alias something 

Ваш друг делает то же самое, используя ssh://..., но вы уже разобрались в этой части.

простой!

+0

благодарит Себастьяна, да, новый репо будет работать наверняка; и позвольте сказать, что я в сети в течение 1 часа, поэтому я хочу передать все, что это лучший способ сделать это? например, я вытаскиваю все из newrepo, а затем меняю свое дистанционное репо на официальное онлайн-приложение, нажимаю все, а затем отменяю newrepo как удаленный, чтобы мы могли продолжать работать без официального онлайн-репо? merci – wily

+0

Работает отлично-thanks Sebastien – wily

+0

привет, лучший способ сделать это - просто добавить онлайн-репозиторий в качестве второго пульта на вашем местном: 'git remote add online-repo-alias url-of-online-repo'. Тогда просто «git push online-repo-alias branchname» –