[英]Is it possible to do a partial clone/branch with either bazaar, mercurial or git?
假設我在源代碼管理中有一個帶有很多子目錄的項目,其中很多是我目前不需要的。
我想創建一個只包含整個樹的一部分的工作副本,它仍然保持更改,提交和推送它們的能力。
這是可能的,如果是這樣,我該怎么辦?
我還在決定是否選擇集市或mercurial,所以關於其中任何一個的答案都會有所幫助。
編輯:實際上,git的解決方案也很有用。
據我所知,克隆樹的子集是不可能的,但還有其他可能性。
Git :命令git clone
有一個--depth
標志:
--depth <depth>
創建一個淺層克隆,其歷史記錄被截斷為指定的修訂數。 淺存儲庫有許多限制(您不能克隆或獲取它,也不能從中推送或插入它),但如果您只對歷史悠久的大型項目的近期歷史感興趣並且希望將修補程序作為補丁發送。
Bazaar : checkout
命令的標志--lightweight
只下載工作目錄而不是整個歷史記錄,並節省帶寬和磁盤空間。 仍支持所有操作,但需要網絡連接才能執行這些操作。
我不知道Merurial是否具有此功能。
如果你已經有了一個存儲庫並且你想要這樣做,那將是一個痛苦。
如果您要使用全新的存儲庫執行此操作,您可能需要查看Mercurial的新子庫 。
基本上,您為某些目錄創建獨立存儲庫:
myproject/
.hg/
source code/
... files here ...
documentation/ (subrepo)
.hg/
... files here ...
graphics/ (subrepo)
.hg/
... files here ...
這將項目的不同部分隔離在不同的存儲庫中。 “包含”repo(本例中為myproject)跟蹤每次提交時子實例的修訂版本。 我提到的subrepo wiki頁面解釋得很好。
在大多數DCVS中,規則是“1個項目== 1個存儲庫”。 沒有“子項目”的概念(與Subversion不同,您可以在其中查看子樹並進行處理)。
主要原因是您的“項目”包含根文件夾中整個存儲庫的副本。 如果您可以在子文件夾中創建整個存儲庫的副本,那么事情會變得非常復雜。
從好的方面來說,創建工作副本是一種快速操作(除非底層文件系統很慢)。
在git中,您可以使用git子樹 ,它允許您僅為特定子項目提取“虛擬”存儲庫,然后在子項目中進行更改,然后將這些更改合並回來。
對於Bazaar,您有嵌套樹: http : //bazaar-vcs.org/NestedTreesDesign ,它允許您在子項目中拆分大項目。
我還沒有使用過這個功能,所以我不知道它有多好用。
您還可以使用--hardlink進行分支以避免復制一堆文件(不確定它是否適用於Windows ...),沒有歷史記錄的分支(較輕的分支)或沒有工作樹的分支(沒有文件,只有歷史記錄)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.