我正在尝试用git-filter-repo过滤一个存储库。我试图通过在一个路径文件中描述所有需要的操作来做到这一点,正如文档中所描述的那样,在--paths-from-file节中将使用这些操作,但我仍然停留在最后一步,以便在一个简单的步骤中完成这一操作。
形势和预期结果
我的git工作目录如下所示:
$ tree
.
├── 00_a_playbook.yml
├── 01_other_playbook.yml
├── 01B_screw_that_fixed_numbering.yml
├── 02_playbook_2_which_is_now_3.yml
├── [...some more badly numbered playbooks...]
├── ansible.cfg
├── doc
│ ├── [...a bunch of docs...]
├── group_vars
│ ├── [...a bunch of var files...]
├── inventory
│ ├── [...a bunch of inventories...]
├── README.md
├── requirements.yml
└── roles
└── my_role
├── [...all my role content...]我想做的是:
playbooks目录根目录下重命名所有已编号的剧本,删除它们的编号。roles和新创建的playbooks dir在回购的根。因此,预期的树是:
.
├── playbooks
| ├── a_playbook.yml
| ├── other_playbook.yml
| ├── screw_that_fixed_numbering.yml
| ├── playbook_2_which_is_now_3.yml
| ├── [...rest of un-numbered playbooks...]
└── roles
└── my_role
├── [...all my role content...]什么起作用
实际上我成功了,但是我需要运行这个工具两次才能得到预期的结果。
如果我创建以下两个路径文件:
../paths_rename_playbooks.txt regex:^\d{2}.?_(.*.yml)$==>剧本/1../paths_keep_folders.txt角色/我的角色剧本然后跑:
git-filter-repo --paths-from-file ../paths_rename_playbooks.txt
git-filter-repo --paths-from-file ../paths_keep_folders.txt我得到了我所期望的和上面描述的。
在单个文件中分组路径指令失败
当我尝试从单个文件执行所有上述操作时,它将失败。
# 2 above files merged in one
$ cat ../all_paths.txt
regex:^\d{2}.?_(.*\.yml)$==>playbooks/\1
roles/my_role
playbooks
# Single run with that file. No errors
$ git-filter-repo --paths-from-file ../all_paths.txt
$ tree
.
└── roles
└── my_role
├── [... my role content ...]如你所见,我重命名的剧本文件不见了。我是在描述这些操作时遗漏了什么,还是除了迭代地运行这个工具来获得我想要的东西之外,我别无选择?
发布于 2022-01-15 10:16:19
赛尔夫回答说出了问题,帮助我发现了这个问题。我错过了关于路径重命名的文档中一个重要的音符。
注意:如果将路径筛选与路径重命名结合起来,请注意重命名指令没有选择路径,它只说明如何重命名使用筛选器选择的路径。
因此,在重命名它们之前,必须描述在原始回购中选择的所有路径。因此,在我的例子中,正则表达式必须定义两次:一次是简单的路径过滤器,另一次是重命名。下面的路径文件在一次运行中完成了该工作:
$ cat ../paths.txt
# Paths to be kept
regex:^\d{2}.?_.*\.yml$
roles/my_role
# Rename playbooks
regex:^\d{2}.?_(.*\.yml)$==>playbooks/\1
$ git-filter-repo --paths-from-file ../paths.txthttps://stackoverflow.com/questions/70720401
复制相似问题