2011-01-21 37 views
4

經過多年的svncvs,我只是撿起了git。我掌握了大部分內容,但我不覺得我的常見使用順序是最佳的。使用遠程「起源」存儲庫的git使用情況

我的設置: 我做我從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 

現在我已經得到了他們的同步。這看起來像是很多額外的步驟來同步我的本地和「主」存儲庫。

有人可以幫助我優化我的用法嗎?

謝謝。

編輯:如果我不這樣做單獨的分支,我收到一條錯誤:

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

我編輯我的帖子與錯誤消息。我認爲你所描述的導致了我的困惑。問題是,我有時候也在原始服務器上進行開發,但現在我想我應該把所有這些都放到一個裸機上,並將它克隆到本地主機以及源服務器上的工作目錄。 – 2011-01-21 01:31:44

1

我建議提取和合並之前,你推到原點。如果你這樣做,你應該能夠直接推送到你的主分支。