首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Git中重命名文件夹。所有分支机构和所有修订

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

Stack Overflow用户
提问于 2017-05-02 14:10:04
回答 1查看 565关注 0票数 1

我在窗口查看一个分支的时候遇到了问题。其中一个文件夹以空空间结束,导致窗口自动调整文件夹,而git试图将文件放入原始路径并导致错误。

代码语言:javascript
复制
fatal: cannot create directory at 'raisesoft/61571_delivery /acl': No such file or directory

在linux上,它工作得很好,因为linux不会自动修剪文件夹。

我想重命名那个文件夹。这就是我想出的剧本:

代码语言:javascript
复制
git filter-branch --tree-filter '
if [ -d "61571_delivery " ]; then
  mv "61571_delivery " "61571_delivery"
fi' --force HEAD

但是它不起作用。它根本没有重命名文件夹。我不精通linux,所以很少的帮助是非常感谢的。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-02 16:01:10

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

代码语言:javascript
复制
"61571_delivery "

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

代码语言:javascript
复制
"raisesoft/61571_delivery "

因此:

代码语言:javascript
复制
git filter-branch --tree-filter '
if [ -d "61571_delivery " ]; then
  mv "61571_delivery " "61571_delivery"
fi' --force HEAD

应改为:

代码语言:javascript
复制
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没有它。我编写了为一个文件执行此操作的脚本,但是您希望对目录中的每个文件都这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43740047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档