2011-09-26 63 views
1

我正在研究和學習分佈式版本控制系統的基礎知識,特別是Git。在觀看關於Git的Linus' Tech Talk之後,我有幾個問題我沒有完全理解。需要注意的是,我來自SVN,基於Windows的背景,所以我的所有問題都是從該環境構建的。關於Git的一些(基礎)問題和說明

  1. 如何合併到其他人的分支處理?也就是說,Joe和Jane都是從主管/主管分支出來的,而Joe想合併Jane在分支中所做的更改,這是如何完成的?爲了讓我的問題更具體 - 如果喬在阿根廷,簡在俄羅斯,這是如何完成的?每個Git分支是否都有一臺能夠完成這些任務的服務器?或者是一箇中央服務器仍然負責跟蹤所有當前分支機構和他們居住的地方? Git如何知道所有這些(可能有數千個)分支機構在哪裏生活? (特別是在Windows環境下!)

  2. Linus談到沒有備份,說這是不必要的,因爲每個人都有他的代碼副本。但是,如果他克隆一個存儲庫,做幾十行更改,提交,但不會推送......如果他的機器死亡,他是否不會損失所有的更改?我認爲我正確理解這個概念(所有提交本地直到被推),但他似乎對這個問題非常討厭,所以我很好奇。

回答

0
  1. multiple protocols混帳可以用它來存儲庫之間傳輸數據:
    • 啞HTTP - 客戶端真的只是下載所需的git的目標文件,所以任何HTTP服務器的作品。但是,這浪費了帶寬。
    • Smart HTTP
    • 取包通過SSH
    • 取包過了Git

最後三個都是「聰明」,在客戶端和服務器合作,以避免不必要的數據傳輸。

您也可以使用git bundle導出一個包含您的更改的二進制文件,然後將其手動傳輸到其他人的計算機。

您的回購並不需要知道所有其他分支的所有位置。通常情況下,您將以remote的方式添加您推送或拉出的少數(或一個)。這基本上是存儲庫URL的快捷方式。但是,您仍然可以從其他網址進行推送。不管你如何獲取數據

,你最終用git merge給它合併。

2.  是,萊納斯意味着他不需要的,他已經被推東西備份。據推測(如果他真的沒有備份),他經常承諾和推動。你不應該從字面上理解他,因爲他通常會在他的公開聲明中發揮戲劇效果。

0

我會給你一個簡短的答案。讓我們從2)開始。是的,你會失去數據。他意味着你不需要傳統意義上的備份(每次都要製作完整目錄的副本)。如果你推「備份」。如果你沒有,你只會失去自上次推送以來的數據。推送與複製/粘貼不同。

1)如何合併到其他人的分支機構處理?

本質上,你的計算機上有一個git倉庫,可以是一個克隆的倉庫,也可以是一個全新的倉庫。然後,你需要一個遠程位置,你可以推送(你只需創建一個'裸'的存儲庫然後推送到它),或者你必須有讀取其他人對你的文件的訪問權限(也許在LAN上,但推送到服務器是更傳統的) 。有了這個裸露的回購或其他人的閱讀權限,他們可以將你的代碼「拉」回到他們的回購中,並且你也可以這樣做。即使人們不認識彼此並從你不知道的體力勞動中抽身,你也可以以任何順序從任何人那裏拉。 git中的魔法將會找出把所有東西放在哪裏,而不是兩次合併。它很好地識別衝突。

0

1)合併在本地處理 - 服務器只是執行線性時間線。

爲了合併本地和遠程,您的Joe將'git pull'Jane的分支(通過任何支持的協議 - 一些像文件系統訪問一樣簡單,一些更像git + ssh混淆),解決任何衝突,以及然後可能會將他的更改推送給主人(如果他有寫權限),或者將其發佈給Jane以獲取。如果Jane在此期間沒有改變任何東西,她可以在沒有任何手動合併的情況下,將Joe的合併後代碼混合起來。

它是如何知道的 - 它不,你告訴它遠程分支在哪裏。有git(github.com)託管服務提供商,您可以在您的網絡服務器上推出自己的服務,並通過任何方式告訴Joe/Jane網址

2)備份很少比每天更頻繁。 Linus可能比備份更頻繁 - 事實上,我使用git作爲代碼的備份,無論 - 多個遠程,我有一個遠程的我自己的代碼,在每次有意義的提交後自動推送。

1

1)你將不得不公開你的repo,以便使用任何一種可用的傳輸機制(ssh,git-daemon等)來完成對等的push/pull操作。在Git中沒有真正的服務器/客戶端的概念,但一般的做法是建立一箇中央存儲庫,人們可以像SVN中的回購一樣進出。除了工作副本以外,您還可以在本地完成回購。作爲一個DVCS,Git可以讓您直接與團隊中的其他人進行協作,然後推送到中央倉庫。你將不會有這樣一箇中央回購站是非常罕見的。

2)萊納斯必須一直在談論的備份推代碼並在其中駐留在本地存儲庫,類似於你將如何在SVN中你的工作目錄更改進度無法正常工作。另外請注意,他一定是在Linux的代碼,其中有數百個合作者,因此他必須提到的是,他們不必擔心信息庫的備份,因爲每個人都有一個副本背景說話。但是,當然,除非您推送,否則您可能會失去本地更改/提交。