将多个子目录拆分为新的git存储库,保留文件移动/命名历史记录

时间:2018-01-05 15:53:21

标签: git

我有一个git存储库projectA,其目录如下:

projectA
    /dir1
    /dir2
    /dir3
    /dir4

dir1,dir2,dir3和dir4都包含多个文件和更深层次的子目录。

我想将dir1和dir2及其所有内容移动到新的git存储库projectB中,并保留与这些文件相关的提交历史记录。通过使用gitk --follow dir1/somefile,我可以跟踪文件的历史记录,即使它已被重命名/移动。

projectA
    /dir3
    /dir4
projectB
    /dir1
    /dir2
  1. 我首先尝试将dir1和dir2收集到一个目录中,并使用filter-branch like this获取仅包含这些文件的新存储库。我最终得到了正确的文件,但是保留的唯一历史记录是收集dir1和dir2的最终提交。所以看起来这个方法不会保留任何连接到这些文件以前的名称/路径的提交。

  2. 我尝试使用different filter-branch方法:

    git filter-branch --index-filter 'git rm --cached -qr --ignore-unmatch -- . && git reset -q $GIT_COMMIT -- dir1 dir2' --prune-empty -- --all
    

    这产生了与第一个相同的结果。

  3. 我也尝试使用与herehere相同的修补方式,但这也无法保留移动/命名历史记录。

  4. 我尝试按照here解释使用子树。计划是将目录提取为新分支,然后使用该新分支创建projectB repo:

    git subtree split --prefix=dir1 -b projectb
    

    我再次得到一个新的分支,其中只包含每个文件的姓氏/路径的提交。

  5. 为了清楚起见,除了将dir1和dir2收集到一个目录中之外,这些目录中的文件之前已经多次重命名/移动,并且需要保留此历史记录。

0 个答案:

没有答案