2011-01-21 5 views
4

Я просто набираю git, после долгих лет svn и cvs. У меня есть большая часть этого, но я не чувствую, что моя общая последовательность использования является оптимальной.Использование git с удаленным репозиторием 'origin'

Моя установка: Я разработку на моей рабочей станции с местным, клонированный хранилище от origin сервера, который на мой проект, проходит лечение, как «мастер» хранилище. Я регулярно делаю git fetch, проверяю новые обновления, затем git merge, чтобы объединить их, если они актуальны.

Однако, когда я работаю и проверяю ветку кода, в которой мое сомнение лежит.

Обычная последовательность я использую:

git branch somenewbranch 
git checkout somenewbranch 
... work work work ... 
git add [changed files] 
git commit 
git checkout master 
git merge somenewbranch 
git branch -d somenewbranch 

Вот что я думаю, что можно оптимизировать:

git push origin master:blahblah   # This won't let me push to master branch 
ssh origin 
cd repodir 
git merge blahblah 
git branch -d blahblah 
logout 
git status        # this shows me I'm still ahead 
git pull origin       # to bring them back in sync 
git remote show origin     # shows I have a stale blahblah branch 
git remote prune origin     # cleans that up 

И теперь я их синхронизации. Это похоже на множество дополнительных шагов для синхронизации моего локального и «основного» репозитория.

Может кто-нибудь помочь мне оптимизировать мое использование?

спасибо.

EDIT: Если я не делаю отдельную ветку, я получаю ошибку, которая гласит:

remote: error: refusing to update checked out branch: refs/heads/master 
remote: error: By default, updating the current branch in a non-bare repository 
remote: error: is denied, because it will make the index and work tree inconsistent 
remote: error: with what you pushed, and will require 'git reset --hard' to match 
remote: error: the work tree to HEAD. 

ответ

3

Если вы просто использовать git push после того как вы внесли изменения, и вы впереди origin/master , тогда все должно идти хорошо. Почему вы явно указываете другую удаленную ветвь, чтобы подтолкнуть вашу локальную ведущую ветвь?

У вас возникли проблемы с отправкой в ​​исходный репозиторий, потому что он жалуется на отмеченную ветку? Если это так, вы делаете распространенную ошибку. Вы должны использовать голый репо в качестве своего источника, чтобы Git мог принимать изменения, не вызывая проблем с рабочей копией на сервере.

Setting up a Private (bare) Repo

How to convert a normal Git repository to a bare one?

+0

Я отредактировал мое сообщение с сообщением об ошибке. Я думаю, что то, что вы описали, привело к моей путанице. Дело в том, что я иногда тоже делаю dev на исходном сервере, но теперь я думаю, что я должен поместить все это в голый репо и клонировать его как на моем локальном хосте, так и на рабочем сервере на исходном сервере. –

+0

Если вам нужно это сделать, просто запустите быстрый «git clone repodir working», и когда вы закончите, «git push && cd .. && rm -rf working» (возможно, индивидуально только для того, чтобы быть в безопасности). – coreyward

+0

Да, я просто создал голой репозиторий, и это отсортировало его. Глупая ошибка newb. Спасибо за помощь; теперь его гораздо проще использовать :-) –

1

Я хотел бы предложить извлекая и сливаясь, прежде чем вы подтолкнуть к ПРОИСХОЖДЕНИЯ. Если вы это сделаете, вы сможете напрямую нажать на свою основную ветку.

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