将子文件夹移动到新存储库中

时间:2018-04-26 20:25:38

标签: linux git github git-filter-branch

我需要将子文件夹移动到新的git存储库中,然后将其作为子模块重新添加到原始存储库并保留原始目录结构。 Github help建议使用

git filter-branch --prune-empty --subdirectory-filter FOLDER-NAME  BRANCH-NAME 

过滤保存与此文件夹相关的历史记录的原始仓库等。但是这种方法不完整,很好从原始仓库过滤掉这个目录及其历史记录,并在历史目录中的点重新添加为子模块创建

我有以下目录结构:

/
  /lib
      /mylib
  /server
  /src
  /tests
  LICENSE
  README.md

命令

git filter-branch --prune-empty --subdirectory-filter lib/mylib master

将源移动到新repo的根目录,这不是我想要的。上层目录相同:

git filter-branch --prune-empty --subdirectory-filter lib master

mylib目录保留在已过滤的回购邮件中(但可能会抓住其他库 - 而不是我的幸运案例)并且工作得更好一些。接下来的步骤是什么:

  1. 从原始仓库中筛选出/lib/mylib及其历史记录,以减少仓库规模并改善其结构(简单方法只需删除它并重新添加为子模块)。
  2. 重新添加/lib/mylib repo作为子模块以保留目录结构
  3. 很高兴在创建/lib/mylib时重新添加历史记录第2点以保持repo的一致性并且可以在任何阶段构建源代码(或者它没有任何意义?)。
  4. 很难吗?有什么想法吗?

1 个答案:

答案 0 :(得分:1)

要保持相同的路径,请执行以下操作:

  1. git filter-branch --prune-empty --subdirectory-filter lib master
  2. 更改了Github manual中提到的已过滤存储库的远程URL。
  3. 将已过滤的回购邮件推送到新来源
  4. 确保在lib
  5. 主要本地仓库中删除了git rm -r mylib目录
  6. 将lib重新添加为子模块:git submodule add https://origin_repo/MyLib.git lib