6

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

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

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

那么实现我的目标的潜在方法是什么 - 唯一的想法是批处理/shell(不知道如何在那里做递归目录的东西,但希望有人会好心;))

任何提示都收到了巨大的感谢和拥抱。

4

3 回答 3

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 脚本,它将小写当前目录下具有incortxt文件扩展名的任何文件的名称:

#! /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
于 2012-11-15T03:37:41.663 回答
2

由于标题或标签未提及任何有关操作系统的内容,因此适用于 macOS。它对git mv文件夹中的所有文件执行小写操作。如果您需要 force 标志,只需将其添加到 after git mv

for f in *; do git mv "$f" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
于 2016-12-06T07:53:18.730 回答
0

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

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

注意:git 2.0.1 现在授权一个简单的git mv a.txt A.txt:请参阅“ Git:更改文件名的大写”。
不再需要像下面这样的脚本

于 2011-09-28T10:40:03.173 回答