我有一个完整的 git 存储库,我想将所有文件和目录重命名为小写。
在 Win7 上运行,我在 gitconfig 中添加了 igorecase = false 并通过 eclipse 重命名了一些文件。生成的提交现在有两个文件,一个全小写,一个大写和小写。
删除“不需要的”文件会转储不理想的版本历史记录......
那么实现我的目标的潜在方法是什么 - 唯一的想法是批处理/shell(不知道如何在那里做递归目录的东西,但希望有人会好心;))
任何提示都收到了巨大的感谢和拥抱。
当我不得不更改 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
ortxt
文件扩展名的任何文件的名称:
#! /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
由于标题或标签未提及任何有关操作系统的内容,因此适用于 macOS。它对git mv
文件夹中的所有文件执行小写操作。如果您需要 force 标志,只需将其添加到 after git mv
。
for f in *; do git mv "$f" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
对于初学者,core.ignorecase
默认情况下为 false。
您的提交应该列出两个文件,但一个用于删除,一个用于添加。
提交后,Git 将检测到一个已重命名为另一个
(因为 Git 的核心是内容提供者)。
历史将被保留(即使您可能需要 agit log --follow -- yourNewFile
才能获取其历史)
注意:git 2.0.1 现在授权一个简单的git mv a.txt A.txt
:请参阅“ Git:更改文件名的大写”。
不再需要像下面这样的脚本。