2012-02-17 260 views
1

我目前使用git的項目有兩個參與者(我和我的朋友)。所以我做了以下事情:遠程倉庫應該如何與GIT中的本地倉庫同步?

我在一臺機器上創建了一個存儲庫,該存儲庫始終可以通過本地網絡上的任何機器訪問。

我們都將這個存儲庫克隆到我們各自的本地機器中,創建本地存儲庫。

現在假設在某個時間點(其中所有三個存儲庫副本都處於完全相同的階段),我分叉了一個分支並在該分支中開始一些開發。我將這些更改推送到遠程,我發現在遠程中自動創建了一個新的分支。

在另一臺機器上,我將該分支拉入同名的新本地分支,以使它們再次處於相同狀態。

現在,當我完成這個分支,並且我希望它與主合併時,我只是做了一個結賬,掌握並做了一個git merge my_branch。現在我該如何使這種變化反映在全球知識庫和其他本地知識庫中?我是否也必須在那裏發佈合併命令?還是有一些推拉方式,以便合併自動同步?

什麼是git哲學?是否應該通過提交將所有本地存儲庫和全局存儲庫完全同步提交,以便各地的樹完全相同?或者單獨的樹木是否可以不同,並且需要從遙控器中拔出哪些分支?

我創建的遠程倉庫是一個純倉庫

回答

5

你之後(我通過搜索無論我需要做,但是我感到很是如何工作的困惑命令瞭解到GIT)已合併到master中,使用git push將合併推送到您的原始存儲庫,就像您使用其他提交一樣。您的朋友需要git pull才能獲得您的更改,但只要源中沒有新內容,並且您的朋友沒有在自己的副本中對主人進行任何更改,則無需執行其他合併。

存儲庫並不總是完全同步;這是分佈式VCS的主要區別之一。

+2

請注意,這樣的中央工作流程依賴於中央存儲庫作爲裸存儲庫。你不能(不應該)推入一個工作目錄的倉庫 – Gareth 2012-02-17 12:06:45

+0

@Gareth我創建的遠程倉庫是一個裸倉庫 – AnkurVj 2012-02-17 12:08:06

+0

@AnkurVj那麼你會好的:)但當然這是一個有用的筆記給其他人誰發現了這個問題 – Gareth 2012-02-17 12:08:44

0

現在我該如何使這種變化反映在全局存儲庫和其他本地存儲庫中?我是否也必須在那裏發佈合併命令?還是有一些推拉方式,以便合併自動同步?

有一個git push命令。

0

合併後您需要推送您的更改。 不要git push

1

這基本上是在我的辦公室在公司網絡上的情況,以及(每個開發人員的計算機上的混帳回購協議,以及一個。

你不需要遠程後重新合併更改您已將它們合併到您的master中。首先,你需要確保中央回購與

git --bare init 

創建於是,當有人想更改合併到主回購,他們做了git pull(得到,因爲已經發生的任何更改自己最後一次提交;這是你可能需要在你的末尾做一些合併的地方),然後是git push(顯然在解決衝突之後)。結果是「中央」服務器上的新合併提交。

我不知道這是否是The Git Way,但它對我們來說目前爲止還是有效的。

1

我會強烈,強烈建議您花時間(我通過搜索無論我需要做,但是我感到很是如何工作的困惑命令瞭解到GIT)至少瀏覽了progit.org book。它有大量的信息和一些漂亮的圖形來解釋分支和提交的概念。

還是有一些推拉方式,使合併自動同步?

如果你想自動從您的當地的一個分支推向遠程分支,有工具,這將有助於(git post hooks,例如)。不過,我有充分的信心說,這是而不是一個適合每個人需求的解決方案 - 這裏有一個link to a related question,你可能會覺得有用。

編輯:

什麼是git的理念是什麼?是否應該通過提交將所有本地存儲庫和全局存儲庫完全同步提交,以便各地的樹完全相同?或者單獨的樹木是否可以不同,並且需要從遙控器中拔出哪些分支?

Git是不是一個服務器 - 客戶端SCM,這是一個分佈式版本控制系統 - 治療混帳一樣的,你會的,比方說,CVS或SVN並不總是正確的方法。在SO上相當流行的工作流程被發現here - 在開發自己的工作流程時,您可能會發現很多相關問題。 (1)(2)