在git中将文件批量重命名为小写

在git中将文件批量重命名为小写,git,renaming,Git,Renaming,我有一个完整的git repo,我想将所有文件和目录重命名为小写 在Win7上运行时,我将igorecase=false添加到gitconfig中,并通过eclipse重命名了一些文件。结果提交现在有两个文件,一个是全小写的,另一个是大写和小写的 删除“不需要的”文件将转储不理想的版本历史记录 那个么,实现我的目标的潜在方法是什么呢?思考的唯一选项是batch/shell(不确定如何在其中执行递归目录,但希望有人会很友善;) 收到的所有提示都会受到热烈的感谢和拥抱。对于初学者,core.igno

我有一个完整的git repo,我想将所有文件和目录重命名为小写

在Win7上运行时,我将igorecase=false添加到gitconfig中,并通过eclipse重命名了一些文件。结果提交现在有两个文件,一个是全小写的,另一个是大写和小写的

删除“不需要的”文件将转储不理想的版本历史记录

那个么,实现我的目标的潜在方法是什么呢?思考的唯一选项是batch/shell(不确定如何在其中执行递归目录,但希望有人会很友善;)


收到的所有提示都会受到热烈的感谢和拥抱。

对于初学者,
core.ignorecase
默认为false

提交时应列出两个文件,但一个用于删除,一个用于添加。
提交后,Git将检测到其中一个已重命名为另一个
(因为Git是其核心a)。
历史记录将被保留(即使您可能需要一个
git日志--follow--yourNewFile
来获取其历史记录)

注意:git 2.0.1现在授权一个简单的
git mv a.txt a.txt
:请参阅。“

不再需要。

当我不得不更改git repo中文件的大小写时,我只需使用两个重命名:

git mv aNiceClass.inc aNiceClass.inc_
git mv aniceclass.inc uAniceClass.inc
Git随后愉快地记录了名称更改:

#要提交的更改:
#
#更名为:aNiceClass.inc->aNiceClass.inc
尝试直接重命名会引发以下错误:

fatal: destination exists, source=aNiceClass.inc, destination=aniceclass.inc
下面是一个示例shell脚本,它将当前目录下具有
inc
txt
文件扩展名的任何文件的名称小写:

#/bin/bash
查找-E-正则表达式“*(inc | txt)$”,同时读取f
做
lc=$(echo${f}| tr A-Z A-Z)
吉特mv$f${lc}_
git mv${lc}\u$lc
完成
这也可能被捣碎成一个丑陋的小衬里:

find-E-正则表达式“*(inc | txt)$”,而读取f;do lc=$(echo${f}tr A-Z A-Z);吉特mv$f${lc};吉特mv${lc}uu$lc;完成

因为标题或标签没有提到任何关于操作系统的内容,所以这在macOS上有效。它对文件夹中的所有文件执行一个小写的git mv。如果您需要强制标志,只需将其添加到
git mv
之后即可

for f in *; do git mv "$f" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done

“删除“不需要的”文件会转储不理想的版本历史记录…”是什么意思。git跟踪“整棵树”的历史记录,因此,如果您进行了重新归档文件名的提交,则不会丢失任何历史记录。此外,当您
git rm File
git add File
时,如果文件相似,git会检测到重命名,您可以在
git status
中看到这一点以澄清。在本地重命名文件,然后重新扫描显示没有要更改的更改。推送成功并查看原始repo(在codebasehq上),两个文件都出现在列表中。然后我做了一些严重错误的事情。重命名文件时,如果该文件中没有任何编辑,则重新扫描repo时不会显示要进行的任何更改。@Ian:“重新扫描”吗?你的意思是一个
git状态
?是的(我很懒-使用gui来实现这一点)@Ian:eclipse是否正确地重命名了这些文件?如果有疑问,每当涉及GUI交互时,最好返回到CLI(命令行界面),并在shell会话中检查
git status
实际返回的内容。@Ian:无论如何,如果您最终得到两个文件,则这不应该是由git引起的,而应该是由Eclipse引起的。b/您可以删除其中一个文件,只要另一个副本存在。不会丢失任何历史记录。注意:您不需要脚本,从git 2.0.1开始:谢谢@softam。虽然OP要求文件和目录,“但我需要排除目录,因此我修改了您的一行代码以排除目录,以防对某人有所帮助:
for f in*;do if[!-d“$f”];然后git mv“$f”“`echo$f|tr”[:upper:”“[:lower:“`”;fi done