我有一个完整的git repo,我想将所有文件和direcories重命名为小写。
在Win7上运行,我已经将igorecase = false添加到gitconfig并通过eclipse重命名了几个文件。生成的提交现在有两个文件,一个全部小写,一个是大写和小写。
删除“不受欢迎的”文件会转储不理想的版本历史记录......
那么什么是实现我的目标的潜在方法 - 只考虑选项是批处理/ shell(不知道如何在那里做递归目录的东西,但希望有人会善良;)
任何提示都得到了大量的感谢和拥抱。
答案 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脚本,它将小写当前目录下具有inc
或txt
文件扩展名的任何文件的名称:
#! /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。