linux - 将子文件夹移出到新存储库中

标签 linux git github git-filter-branch

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

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

过滤保留与此文件夹相关的历史记录等的原始 repo 协议(protocol)。但是这种方法并不完整,最好从原始 repo 协议(protocol)中过滤掉此目录及其历史记录,然后将其作为子模块重新添加到历史目录中的位置已创建。

我有以下目录结构:

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

命令

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

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

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

mylib 目录保留在过滤后的 repo 中(但可能会获取其他库 - 幸运的是我的情况不是这样)并且工作得更好一点。那么接下来的步骤是什么:

  1. 从原始 repo 中过滤掉 /lib/mylib 及其历史记录,以减少 repo 大小并改进其结构(简单的方法是将其删除并重新添加为子模块)。
  2. 重新添加 /lib/mylib 存储库作为子模块以保留目录结构
  3. 很高兴在创建 /lib/mylib 的历史点上重新添加第二个,以保持 repo 的一致性和源在任何阶段的可构建性(或者它没有意义?)。

做起来难吗?有什么想法吗?

最佳答案

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

  1. git filter-branch --prune-empty --subdirectory-filter lib master
  2. 更改了筛选存储库的远程 URL,如 Github manual 中所述.
  3. 将过滤后的 repo 推送到新源​​
  4. 确保 lib 目录在主要本地仓库中被删除:git rm -r mylib
  5. 重新添加 lib 作为子模块:git submodule add https://origin_repo/MyLib.git lib

关于linux - 将子文件夹移出到新存储库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50051310/

相关文章:

linux - 如果里面只有一个文件,需要在 linux 中创建带有数据库行 ID 的目录吗?

git - 为什么 'git bisect' 分支不知道?

python - 如何使用 python(dulwich) 获取指定文件的最后一次提交?

backup - 备份/镜像Github存储库

git - 创建一个分支别名并推送它

linux - 如何从 vmlinux 安装 debuginfo 包

linux - 如何让 Subversion 使用第三方差异工具?

linux - 如何在编辑器中传输程序输出?

git - 解决 git 冲突 visual studio 2013

git - 如何重命名 GitHub 存储库?