假設我的git倉庫的結構如下:提取git存儲庫的一部分?
/.git
/Project
/Project/SubProject-0
/Project/SubProject-1
/Project/SubProject-2
和檔案庫有相當長的一段提交。現在其中一個子項目(SubProject-0)增長很大,我想將SubProject-0取出並將其設置爲獨立項目。是否有可能從父git存儲庫中提取涉及SubProject-0的所有提交歷史記錄並將其移至新的歷史記錄?
假設我的git倉庫的結構如下:提取git存儲庫的一部分?
/.git
/Project
/Project/SubProject-0
/Project/SubProject-1
/Project/SubProject-2
和檔案庫有相當長的一段提交。現在其中一個子項目(SubProject-0)增長很大,我想將SubProject-0取出並將其設置爲獨立項目。是否有可能從父git存儲庫中提取涉及SubProject-0的所有提交歷史記錄並將其移至新的歷史記錄?
見http://git-scm.com/docs/git-filter-branch
我認爲你需要像
git filter-branch --subdirectory-filter Project/SubProject-0 --prune-empty -- --all
在倉庫的一個克隆。
我需要做類似的事情,但我想從本質上將一個子項目從一個回購移到另一個。我所做的是使用fetch,因爲它可以從任何來源獲取對象。
因此,基本上,我創建了一個新分支,刪除了該分支中不需要的東西,然後使用git fetch將分支從一個回購倉庫拉到另一個倉庫。一旦我有了這些對象,合併就完成了。
E.g.
在具有原始材料庫:
git checkout -b temp master
git rm -r Unneeded_stuff
git commit -m 'pruning'
然後,你可以從一個存儲庫分支提取到一個完全不同的(無關):
cd /path/to/other/repository
git fetch /path/to/source/repo temp:temp
其中溫度:溫度手段「在源上獲取temp並將其保存爲temp」。從那裏你可以將結果合併到你的主人。
git merge temp
然後,您可以刪除臨時分支,因爲它不是你想與原來的回購合併一些第一種情況,而在第二種情況下,你把它合併。
我確定這些步驟可能會被壓縮一點,但這個設置看起來不錯而且清晰。
請注意,這是一個http://stackoverflow.com/questions/359424/detach-subdirectory-into-separate-git-repository(如吉姆DeLaHunt在他的答案中所述)的副本。 – 2012-10-03 06:36:39