![](/img/trans.png)
[英]How to merge two separate Git repositories into a new repository, with complete history
[英]How to split a repository with subfolders into separate repositories for each subfolder?
我有一個本地存儲庫,其中包含單獨子文件夾中的多個項目,我想將其拆分為單獨的、特定於項目的存儲庫,而不改變實際的文件夾結構。 這是文件夾樹當前的樣子:
bigfolder/
.git/
project1/
subfolder1/
subfolder2/
project2/
subfolder1/
subfolder2/
我想要的是這個:
bigfolder/
project1/
.git/
subfolder1/
subfolder2/
project2/
.git/
subfolder1/
subfolder2/
我不想刪除頂層文件夾或將項目文件夾從它下面移出。 我只想擁有更小的、特定於項目的存儲庫,以保存每個項目文件夾中文件的提交歷史。
我嘗試按照本文 GitHub 文檔中的說明, 將子文件夾拆分到新存儲庫中,但是當我將bigfolder/
存儲庫克隆到project1/
文件夾中時,它bigfolder
中的所有內容復制到project1
文件夾中,包括所有項目文件夾。 使用git filter-repo
刪除了所有新創建的項目文件夾中的文件,但新的 project1 文件夾除外,但文件夾樹完好無損。 我究竟做錯了什么? 提前致謝!
您可以使用git subtree
將子目錄拆分為單獨的存儲庫。 該過程可能如下所示。
對於每個項目目錄,使用git subtree split
將該目錄的歷史記錄移動到一個獨立的分支中:
ref=$(git subtree split --prefix=project1) git branch project1-split $ref
對每個項目目錄重復此操作。 這會將每個目錄的歷史記錄拆分為一個單獨的分支。
現在你有了它,你可以重新創建你的目錄層次結構:
cd.. mkdir new-big-directory cd new-big-directory git clone -b project1-split../big-directory project1 git clone -b project2-split../big-directory project2
這將為您提供所需的布局。 此時您可能需要重命名分支:
git -C project1 branch -m project1-split main git -C project2 branch -m project2-split main
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.