2014-06-24 80 views
0

我有一個存儲庫,其中包含多個分支。例如分支丟失將存儲庫轉換爲裸機後

git --branch -a 
*master 
remotes/origin/HEAD -> origin/master 
remotes/origin/branch1 
remotes/origin/branch2 
remotes/origin/master 

Iconverted它用在這裏找到方法的純倉庫:How to convert a normal Git repository to a bare one?

在純倉庫,運行相同的命令「混帳分支-a」,所有的分支列出。

git --branch -a 
*master 
remotes/origin/HEAD -> origin/master 
remotes/origin/branch1 
remotes/origin/branch2 
remotes/origin/master 

一旦我從裸倉庫中克隆,分支就不見了。運行git --branch -a顯示:

git clone git-server git-local 
cd git-local 
git --branch -a 
*master 
remotes/origin/HEAD - origin/master 
remotes/origin/master 

有什麼我失蹤了嗎?我如何獲得分支機構?

回答

1

他們不是真的「失蹤」:他們故意沒有采取新的克隆。

另一種方法來說這是你的裸倉庫只有一個分支master。你看到的其他東西(remotes/origin/branch1等)不是分支,它們是「遠程分支」。 (這些名字很不幸地是相似的,你可以使用「本地」一詞來限定本地分支機構,以便將它們與「遠程分支機構」區分開來,所以另一種方式是複製本地分支機構。請記住,每個克隆都是獨立的git存儲庫。 這個想法是,你做這個克隆,然後自己修改它。直到您決定發佈(共享)它們,您的更改完全是您的更改。所以你的克隆起初是作爲你克隆的東西的副本,但隨着你做自己的工作而變得更改。

無論您是否更改您的副本,在某些時候您可能想要選擇其他人發佈(共享)的更改。這是git的「遠程分支機構」進來的地方。您的私人存儲庫副本將擁有您自己的個人本地分支機構,這些分支機構最多可以創建和維護。但是,無論你從最初拷貝到哪裏,即origin -is 也都是的獨立存儲庫。你複製的人 - 讓我們稱這個人爲鮑勃,讓他擁有一個名字 - 可能已經做了一些改變,然後決定讓你分享它們。爲了選擇Bob的更改,您將副本放在副本中,這是一組「遠程分支」,用於跟蹤Bob的存儲庫分支所在的位置。

這些是您看到的remotes/origin/分支,如remotes/origin/master。很明顯,你有或至少有權訪問Bob的存儲庫,因爲你使用來創建你的存儲庫。因此,您的git存儲庫會記錄Bob的遠程名稱origin(您的克隆的起源)的URL。

比方說,其他人,例如克拉拉,現在克隆您的存儲庫。她將獲得她的「遠程分支機構」,你的(地方)分支機構。她沒有得到Bob的分支,因爲Clara沒有複製Bob的存儲庫。她只是獲得您的分支機構,在她的存儲庫中,該分支機構的生存時間爲remotes/origin/。她獲得您的master並稱之爲remotes/origin/master。這與remotes/origin/master無關,您和您的克隆用於跟蹤Bob在Bob的master中的工作。

如果您庫拿起所有Bob的變化,所有的Bob的變化融入當地分支,然後在該點克拉拉可以拿起你的分支,這是一樣的Bob的樹枝,從而趕上鮑勃。但她通過你做到了。

如果克拉拉意識到鮑勃存在並決定直接拿起他的東西,她可能會在她的克隆中錄製另一個遙控器。比方說,她遠程bob調用此:

$ git remote add bob ssh://whatever... # whatever URL is appropriate 

克拉拉現在可以運行git fetch bob聯繫Bob的系統,並拿起他的地方分支機構。在她的git倉庫中,這些將被稱爲remotes/bob/:例如,她將獲得remotes/bob/master。然後克拉拉可以比較remotes/bob/masterremotes/origin/master庫,看看你是否一直保持主最新Bob的master:她remotes/origin/master是你master作爲最後一次與你她重新同步的副本,而她的remotes/bob/master是Bob上一次與Bob重新同步的Bob的master的副本。

總之,克隆不復制remotes/分支,因爲這沒有意義。克隆人可以訪問您的存儲庫 - 他們正在克隆的存儲庫 - 並且通常不關心您的存儲庫是否可以訪問某個其他存儲庫。他們只關心你的分支 - 至少,直到他們添加更多的遙控器。


至少,獨立原則性。您可以製作基本上不完整的「淺」克隆。這些仍然是獨立的,它們只是具有向後引用,如果不先聯繫另一個存儲庫,就無法解決這個問題,從而「深化」副本。一個非淺的(即「完全深入」)克隆雖然具有一切,但它是真正獨立的。

+0

謝謝你。我明白現在發生了什麼事。我已經提出了另一個更好地解釋我的情況的問題。 –

相關問題