2010-01-29 69 views
5

我剛開始使用git,並且對SVN的工作流差異印象深刻,但我遇到了一個結構/設置問題,文檔似乎沒有直觀地解釋如何設置,而我想知道這是否可能。從兩臺機器開發的Git存儲庫設置?

我的設置是我有幾臺電腦(臺式機和筆記本電腦)開發,所以爲了更容易保持同步併爲git存儲庫提供備份,我在家中建立了一個「公共」存儲庫Linux服務器,我可以從桌面和筆記本電腦ssh進入。它不是真正公開的,因爲它需要通過SSH訪問盒子才能訪問。

當我做我的桌面上的變化,我可以很容易地更改推送到服務器庫(我對originmirror標誌設置遠程對系統信息庫),並利用gitx我可以看到我的問題就來了,當地的和遠程狀態看起來完全相同,並且我的每個單獨提交都已記錄到服務器。

問題是,當我切換到筆記本電腦時,我很少使用,git存儲庫可能存在服務器版本後面的幾個提交併需要更新。我開始使用git pull來獲取這些更改本地,但不是將服務器上的所有單獨提交複製到本地存儲庫,而是向本地存儲庫添加一個新的「合併」提交,並且gitx顯示遠程存儲庫分支中的合併點。

是否有一個命令/工作流程可讓我將本地存儲庫更新爲遠程存儲庫的確切狀態(例如,如果我執行git push --mirror,則不會丟失任何數據)?我是否每次都要刪除我的本地存儲庫,並且每次都要再次刪除git clone

目前沒有其他人需要訪問此存儲庫,但將來它可能會成爲人們的公共存儲庫,所以不會破壞這種可能性的答案將不勝感激。

編輯:我的提交確實包括重新設置主分支的分支;這可能是什麼觸發git pull命令顯示爲合併? --rebase是我需要的標誌嗎?

解決方案說明:原來我已經做了以下設置我的倉庫:

  • 使用筆記本電腦來初始化一個Git倉庫
  • 推筆記本電腦資料庫服務器(提交一個
  • 作出的變更和提交它在筆記本電腦(筆記本在提交
  • 桌面克隆服務器存儲庫(提交一個
  • 請在桌面上的變化,並承諾(承諾çdē,包括重訂分支機構)
  • 桌面推送到服務器端(server快轉發到Ë
  • 當筆記本電腦從服務器拉出,導致合併(因爲不能快進到Ë)。
  • 筆記本電腦合併,並將更改推送到服務器
  • 桌面現在也必須合併。

因爲這一個額外的提交是一個無意的newb錯誤,它使我認爲它總是一個合併。根據Xentac的建議,我回到了筆記本電腦,發現我合併時沒有推送到服務器,這是罪魁禍首,而且一旦我全部三個人真正同步,git pull --ff(僅強制快進合併)工作得很好,如果在合併之前有什麼不同步,就會發出警告。

回答

4

因爲您的筆記本電腦的主分支中有不在服務器的主分支中的提交,所以每當服務器發生更改時,便攜式計算機都無法更新主分支指針。這就是爲什麼你要創建合併提交。

如果您想要繼續進行未存儲在服務器上但只存儲在筆記本電腦上的更改,則需要git fetch,然後git rebase origin/master。提取將從服務器下載提交,但不會更改您的本地分支,並且重新分配將在服務器的主分支(原始/主)之上重新創建筆記本電腦的主分支更改。

它可能會更好,但沒有那些提交懸而未決。難道他們不能被整合到整個代碼庫中只有一個共同的歷史嗎?

1

我打算建議使用--ff標誌,但它的手冊頁說這是默認行爲。你可以試試git pull --ff,看看它是否有所作爲。

如果你得到一個合併提交,它會建議你在你的筆記本電腦上提交不在服務器上的提交。

您的筆記本電腦是否設置爲服務器的鏡像,就像您的桌面一樣?

相關問題