2011-04-04 125 views

回答

11

你的問題並沒有太大的意義。存儲庫始終包含至少一個分支,並且不存在沒有存儲庫的分支。所以當然,分支比儲存庫小。這兩者並不是真正可比的東西。

因此,讓我們來談談一下Git倉庫實際包含的內容。有幾個主要的事情:

  • 工作樹 - 這是所有的文件,你的工作的那些當前狀態。這可能佔用相當大的空間。

  • 對象 - 這些都是內部的方式混帳東西專賣店 - 斑點代表的文件,樹代表目錄結構的內容,提交代表工作樹的快照。這是真正需要空間的另一件事。

  • refs - 參考文獻的簡寫:分支或標籤。這些非常非常輕量級 - 它們只是指向特定提交的指針。他們確實佔用了一點空間,但卻很少,您應該將它們視爲完全免費。標籤是固定的參考;他們永遠指向一個提交,並用於標記版本等。分支是可移動的引用;一個被檢出,隨着你的提交,它向前發展。它們就是你用來表示開發線的一個部分 - 一個穩定的分支,一個針對特定錯誤修復或功能的分支,你將其命名。

.git目錄中除了對象和引用之外還有其他的東西,但現在不用多關心它們。

如何跟蹤錯誤修復(我們正在使用Jira)?你怎麼知道哪個分支或存儲庫有錯誤修復?

這是由你自己決定的。通常人們最終會在他們的提交信息中嵌入一些信息,以表明他們解決了某些特定的錯誤/問題。您可能應該有一個定義的工作流程,您可以在自己的分支上進行錯誤修正(或者可能是以前版本的維護分支),然後將它們合併到當前的開發分支中,從而與未來版本共享錯誤修復。你應該能夠說出類似於「主分支和維護分支始終具有所有錯誤修復」的內容 - 儘管如果你想檢查,你可以執行類似git log --grep='bug 1234'的操作,假設你已經將該字符串放入了提交消息中!

通常,不需要在同一個項目的存儲庫中有多個克隆。你可能會有一箇中心問題,每個開發人員都有自己的問題 - 但是當開發人員發佈他們的工作時,他們會將其放在中心位置,這就是重要的一切。

2

對我來說,存儲庫應該包含一個獨特的項目。分支是該項目發展的「途徑」。所以你可能有一個開發分支,一個生產分支,一些功能分支和一些錯誤修復分支。分支機構可以根據需要相互合併,最終合併爲開發和生產。

磁盤空間:整個存儲庫比創建分支要大,因爲分支首次創建時實際上只是一個指針,而整個存儲庫需要重新存儲所有的git文件。

+1

如果您的克隆回購軟件位於同一磁盤上並使用硬鏈接,則可能無法使用更多的空間。不僅僅是一個指針,這是所有分支使用的指針,但不一定是所有文件的副本。 – bstpierre 2011-04-04 19:45:41

+0

我問的原因是因爲我最近參加了一些git培訓,並且教師顯示了有2個回購的工作流程。一個是在主分支上進行開發。這個回購是建立和測試,然後提交被推入「黃金」回購供QA使用。我們正試圖將使用此模型的原因與使用分支進行對比。感謝大家的意見。我像往常一樣學習很多東西。 :-) – user561638 2011-04-05 14:00:31

4

一個分支在同一個倉庫裏總是花費幾乎沒有任何東西要創造(從技術上講,這取決於你在分支中放置什麼,但我確定這是清楚的開始)。

當克隆回購,你結束了兩倍的存儲需求(無論是在包裝和工作樹)。但是,這可能會導致您相信克隆存儲庫必然是不理想的事情。讓我告訴你爲什麼這並非總是如此/

一個回購實際上只是分支裁判的集合。一個分支實際上(如在深度複製中)需要和回購一樣多,除了特定分支的提交中的blob。 (通常沒有太大的差異)。

在本地,你可以克隆一個回購實際上沒有額外的成本,因爲它可以被硬鏈接(在相同的文件系統中)。另外,通過克隆到裸倉庫可以避免另一棵工作樹所產生的成本(例如,通過使用git clone --mirror)。

中的項目

在我看來,回購相當於分佈式工作流一個「球員」。玩家可以是「自然人」或「角色代理人」。我有

  • 中央回購
  • 工作回購(每個工作站一個(與網絡的連接,以便我可以從任何地方推拉工作);與與ProofOfConcept-ING相關,合併短暫和臨時的分支,微提交等)
  • 備份回購
  • [也許github上克隆用於拉請求如果上游開發者是在github]

在實踐中只有3-4類型的分支被ACROS共享所有回購(主,主要,測試,不穩定)。

外的項目

當然,一期工程西港島線有它自己的回購協議(大部分時間)。我開始傾向於使用子模塊,因爲它似乎比異構分支更靈活(即不同的項目在同一回購的獨立分支)

有一個單一回購協議的一大好處是,它將非常順利地將其相關的工作樹從一個分支切換到另一個分支。

  • 可以將其作爲遠程
  • 您可以將您的工作樹從另一個存儲庫中的分支,你可以有一個獨立的(甚至是裸)的回購協議:爲了公平對待這種差異可以在兩個方向進行加工arounnd通過覆蓋GIT_WORKTREE環境變量與「非本地」工作樹工作

你看,當你看它這樣,回購開始是分支的集合,具有或多或少convential協會到單個工作樹。這些約定是真正的差異出現的地方:你通常使用使用repo來管理分支集和不同的工作樹。

+0

一個分支需要一個回購?你用過git嗎? – Cascabel 2011-04-05 00:36:13

+0

像你一樣:) tyvm,我專門使用git;你爲什麼要用不同的方式說話?對於所有的意圖和目的,在本地文件系統上,'git branch bla'或'git clone之間沒有太大的區別。 ../ blo'除非裸露回購中的工作樹木;爲什麼你想用不同的方式來表述? – sehe 2011-04-05 07:49:05

+0

呃,是不是工作樹足夠的區別?如果無論出於何種原因,存儲庫不在同一個文件系統中,則其餘部分也會加倍。 (這只是磁盤空間 - 它也需要人工時間來保持它們的同步!)我認爲,鑑於OP提出這個問題的事實,你必須更加小心。創建分支基本上總是免費的;克隆回購不是。如果你可以調整第一句話,我會很樂意拿走我的失望 - 其餘的答案很好,我剛剛發現這個開場非常誤導。 – Cascabel 2011-04-05 12:57:36

0

回購協議中的分支機構也具有超越其他評論的優勢。許多圖形(或文本UI)工具可以向您顯示關於repo中的分支上的commit/tags/etc的信息。如果您每次想要破解開發時都創建了新的存儲庫,那麼這些數據就不可用。

使用內部分支時,您還可以更容易地表達分支關係的分支。在那裏很自然,而有了額外的回購,你必須從外部追蹤和管理這種關係。

+0

我問的原因是因爲我最近參加了一些git培訓,並且指導員正在展示一個工作流程,其中有2個回購。一個是在主分支上進行開發。這個回購是建立和測試,然後提交被推入「黃金」回購供QA使用。我們正試圖將使用此模型的原因與使用分支進行對比。感謝大家的意見。我像往常一樣學習很多東西。 :-) – user561638 2011-04-05 14:13:06