首页 > 解决方案 > git批量重命名大量提交的文件

问题描述

我有一个 git repo,其中包含大量(数千个)提交的文件。我想用批处理命令行命令重命名它,比如

git mv *.txt *.md

但收到了fatal: bad source, source=*.txt, destination=*.md消息。

如何使用 git cli 重命名提交的文件?

标签: git

解决方案


为了最大限度地提高 CPU 效率,Git 的核心update-index命令可以对标准输入进行批量更新:

git ls-files -s \*.txt \
| sed -r 's,([^ ]* )(.*)\.txt,0 \2.txt\n\1\2.md,' \
| git update-index --index-info

这将一次性完成索引更新。然后,您可以一次git read-tree完成工作树更新

newtree=`git write-tree`
git read-tree @
git read-tree -u --reset @ $newtree

将转储sed的索引条目转换git ls -s为两个索引更新,一个用于旧名称的删除(模式 0)条目*.txt和一个用于新名称的插入*.mdgit read-tree是结帐和合并以及许多其他批量工作树更新程序的核心命令,上面的顺序是“为索引编写树,在结帐时将其重置为其状态,然后重新读取新树并更新工作树进行匹配,就好像我们正在执行结帐或快进合并一样”。


编辑:为了最大的方便,你可以改为

find -name \*.txt -execdir rename .txt .md {} +
git add -A .

这还将获取您在工作树中可能进行的任何其他更改;这不太“安全”,您可能不希望添加任何其他更改,或者您.gitignore可能还没有完全调整好,但是如果您的构建是干净的,那么这可能会节省更多的打字时间,而不是 make-Git-figure-it 中的成本-全力以赴的时间。


推荐阅读