在 Git 中重命名文件夹。所有分支和所有修订

达维塔

在 Windows 中签出分支时遇到问题。一个文件夹以一个空格结尾,导致 windows 自动修剪文件夹,而 git 试图将文件放在原始路径中并导致错误。

fatal: cannot create directory at 'raisesoft/61571_delivery /acl': No such file or directory

在 linux 上它工作正常,因为 linux 不会自动修剪文件夹。

我正在尝试重命名该文件夹。这是我想出的脚本:

git filter-branch --tree-filter '
if [ -d "61571_delivery " ]; then
  mv "61571_delivery " "61571_delivery"
fi' --force HEAD

但是它不起作用。它根本没有重命名文件夹。我不精通 linux bash,因此不胜感激。

谢谢

周二

你基本上是在正确的轨道上。您的树过滤器只是在寻找错误的名称。目录的路径名不是:

"61571_delivery "

(完整的尾随空格需要一个引号来表示清楚),而是:

"raisesoft/61571_delivery "

因此:

git filter-branch --tree-filter '
if [ -d "61571_delivery " ]; then
  mv "61571_delivery " "61571_delivery"
fi' --force HEAD

应该读:

git filter-branch --tree-filter '
if [ -d "raisesoft/61571_delivery " ]; then
  mv "raisesoft/61571_delivery " "raisesoft/61571_delivery"
fi' --force HEAD

(一旦你测试它并看到它工作,切换到--all并添加--tag-name-filter cat以更改注释标签)。

值得一提的是,--tree-filter极其缓慢。在大型存储库中,在旋转介质(而不是 SSD 或内存文件系统)上执行此操作可能需要数天甚至数周时间。您可以通过使用内存文件系统来--index-filter大大加快速度,但最大的加速来自使用--tree-filter. 使用树过滤器,Git 必须将索引中的每个提交提取到常规文件系统树中,运行过滤器,然后将树转换回可用于写入新提交的索引。虽然没有任何部分git filter-branch快速的,但这是最慢的部分。使用索引过滤器,Git 可以完全跳过这一步:它只是将提交读入索引,运行你的索引过滤器,然后从索引中写入一个新的提交。

不幸的是,没有好的开箱即用的方法来编写一个索引过滤器来做到这一点。您基本上只希望 Git 等效hg mv --after于重命名索引中的文件——但 Git 没有它。我写了一个脚本,为一个文件执行此操作,但您希望为目录中的每个文件执行此操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Git - 重命名所有默认分支

如何将文件夹中的所有文件推送到所有git分支

git mv重命名所有文件和文件夹以大写首字母

将分支中的所有文件和文件夹替换为(当前)非git文件夹

我无法从GIT的分支机构中获取所有文件夹

列出某个时刻存在于Git存储库分支中的文件夹的所有子文件夹

从git存储库中拆分一个带有所有分支和历史记录的子文件夹

Git将文件夹视为文件,并忽略所有子文件夹和-files

有什么办法将所有git分支转换为存储库的文件夹?

如何删除一个文件夹,但将所有子文件夹和文件保留在一个git分支中?

埃马克。头盔包。如何在文件夹(不是 git 文件夹)和所有子文件夹中查找文件?

如何防止Node JS服务.git文件夹和.git下的所有文件

git如何列出两次提交之间的所有文件和目录重命名

如何在不指定每个分支的情况下将git存储库的所有分支克隆到它们自己的文件夹中?

Git Clone 不会下载所有文件夹

使用git时如何查找所有空文件夹和未跟踪的文件?

git会忽略特定类型的所有文件,但特定子文件夹中的文件除外

使用find获取所有没有.git子文件夹的文件夹

在Windows上将所有Git分支名称重命名为小写(GitHub远程)

git 2018:是否可以为所有用户在远程重命名分支?

批。批量重命名文件夹和所有子文件夹中的文件

如何列出在Git中更改了文件的所有文件夹名称?

如何应用/ patches文件夹中的所有git .patch文件-npm

当我在Git中运行此命令时,所有文件/文件夹都消失了

在Git中,如何压缩与文件或文件夹相关的所有提交?

在git中合并重命名的文件夹

从git历史记录中删除除某些文件夹以外的所有文件夹

重命名文件夹中的所有文件也重命名子文件夹

在Git远程所有分支中搜索文件内容