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

时间:2011-09-28 10:31:15

标签: git renaming

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

在Win7上运行,我已经将igorecase = false添加到gitconfig并通过eclipse重命名了几个文件。生成的提交现在有两个文件,一个全部小写,一个是大写和小写。

删除“不受欢迎的”文件会转储不理想的版本历史记录......

那么什么是实现我的目标的潜在方法 - 只考虑选项是批处理/ shell(不知道如何在那里做递归目录的东西,但希望有人会善良;)

任何提示都得到了大量的感谢和拥抱。

3 个答案:

答案 0 :(得分:3)

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

git mv aNiceClass.inc aniceclass.inc_
git mv aniceclass.inc_ aniceclass.inc

Git然后愉快地记录了名称更改:

# Changes to be committed:
#
#   renamed:    aNiceClass.inc -> aniceclass.inc

尝试直接重命名会抛出此错误:

fatal: destination exists, source=aNiceClass.inc, destination=aniceclass.inc

这是一个示例shell脚本,它将小写当前目录下具有inctxt文件扩展名的任何文件的名称:

#! /bin/bash

find -E . -regex '.*(inc|txt)$' | while read f
do
   lc=$(echo ${f} | tr A-Z a-z)
   git mv $f ${lc}_
   git mv ${lc}_ $lc
done

那也可能被丑陋的小单行捣碎:

find -E . -regex '.*(inc|txt)$' | while read f; do lc=$(echo ${f} | tr A-Z a-z); git mv $f ${lc}_; git mv ${lc}_ $lc; done

答案 1 :(得分:2)

由于标题或标签没有提及有关操作系统的任何内容,因此适用于macOS。它对文件夹中的所有文件执行git mv小写。如果您需要强制标记,只需在git mv之后添加。

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

答案 2 :(得分:0)

对于初学者,默认情况下core.ignorecase为false。

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

注意:git 2.0.1现在授权一个简单的git mv a.txt A.txt:请参阅“Git: Changing capitalization of filenames”。
不再需要script like the one below