git - 混淆编写 git filter-branch 将所有文件移动到子目录

标签 git repository git-filter-branch

我相信 git filter-branch 可以让我这样做,但我不知道我是否需要使用 --subdirectory-filter 或是否需要使用索引过滤器。

但是,假设我有一个名为 repo 的存储库,其结构如下所示:

repo/fileA
repo/fileB
repo/dir1/fileC

我想做的是将所有内容移动到名为 dir2 的目录中,结果是:

repo/dir2/fileA
repo/dir2/fileB
repo/dir2/dir1/fileC

我想使用 filter-branch 让它看起来像自从这个存储库诞生以来,一切都是在 dir2 中完成的。使用子目录文件或索引过滤器更合适吗?

最佳答案

一个树过滤器。像下面这样的东西应该可以工作:

git filter-branch --tree-filter 'test -e fileA && mkdir dir2 && mkdir dir2/dir1 && mv fileA fileB dir2/ && mv dir1/fileC dir2/dir1/ || echo "no op"' HEAD

但是,这假定同时添加了文件 A、文件 B 和文件 C(因为我们对文件 A 使用了 test -e),但情况可能并非如此。如果不是这种情况,您必须对每个文件进行多次扫描。

关于git - 混淆编写 git filter-branch 将所有文件移动到子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9660896/

相关文章:

git - 我是如何搞砸这个非常简单的 .gitignore 文件的?

linux - git 删除系统中不再存在的文件

c# - (XAMARIN ANDROID) - 我如何为每个循环遍历 List<T> 并获取每个项目然后传递给数组适配器然后传递给 ListView

java - Spring数据 Autowiring : Two bean candidates using @Autowired

git - git filter-branch 的正确并行化

GitHub 一直说 "This branch is X commits ahead, Y commits behind"

git - 当 SSH URL 路径在远程存储库重命名期间发生更改时,git 如何识别要推送到的正确路径?

git - 如何直接从 git bash 命令行创建 azure 存储库? (无需进入浏览器)

git - Git Filter-Branch All命令

git - 如何在 Git 中永久删除文件而不获取 "WARNING: Ref ' refs/heads/master' is unchanged”?