所以,我正在使用带有大型VB6代码库的git(在Windows上使用Git Extensions 2)。对于不熟悉VB6的人来说,它不区分大小写,并且习惯在保存文件时更改变量名称的大小写。可以采取一些步骤来最小化此行为(请参阅Stop Visual Basic 6 from changing my casing),但以这种方式完全消除问题是不可行的。问题当然是案例变化显示为Git的变化,从而干扰了提交历史,实际上几乎无法找到变化。
我正在寻找一种从源代码控制方面处理这个问题的方法,并希望得到任何输入。我目前追求的途径是优先顺序:
我有一种感觉,2号选项可能是我最好的选择,但我并不确定最好的方法来处理它。我目前的想法是:
我很确定这是一个尽可能好的解决方案。在分段之前运行此工具将解决所有问题。有没有人对这种方法有任何想法?
另外,如果我沿着这条路走下去,最好有一个Git钩子来防止任何情况下只改变。我完全不知道如何实现这样的东西,所以任何帮助创建这样的脚本都会很棒。
要想知道问题的规模,当变量的情况发生变化时,它将改变打开文件中具有相同名称的每个变量的每个实例。每次提交时,都会发生几个变量,看起来好像每个修改过的文件中有~30%已经改变了。这使得手动过程(我正在做的事情)非常不切实际,只对真正的小提交有用。
非常感谢您的帮助!
答案 0 :(得分:1)
#!/bin/bash
# Script to discard any case only changes that haven't been staged.
# Create a backup of the current changes
BACKUPFILE="$( date +%Y%m%d%H%M%S.backup.patch )"
git diff > $BACKUPFILE
# For each file that has been changed
for f in $( git diff --name-only --ignore-submodules=all); do
# Create a case insensitive patch
git show :$f | diff -uiw - $f > temp.patch;
# Reset the file
git checkout -- $f;
# Apply the case insensitive patch, hence discarding case only changes
git apply --whitespace=nowarn temp.patch;
# git apply doesn't respect autocrlf so replace all LF with CRLF
# $ matches the end of line
# '\r' expands to CRLF in a bash shell
sed s/$/'\r'/ $f > temp.txt;
mv temp.txt $f;
# clean up temporary files
rm temp.patch;
done
echo "If everything is as expected you can delete $BACKUPFILE.
If things have gone wrong you can revert to your previous state by executing;
git reset --hard HEAD
git apply $BACKUPFILE"
答案 1 :(得分:0)
面对这个问题,我编写了一个例程,它知道我的代码中使用的所有名词,并将它们翻转到适当的情况下 - 它将在预提交钩子中运行。
我认为它还有一个发现例程,当它找到新的Dim语句时会添加到库中。
这确实意味着你必须保持一致,以防每个变量名称(除非你添加忽略某些单词的方法)。
唉,我不再有它了...我的VB6工具包的大部分内容已经转移到天空中的/dev/null
。我记得,在文件的开头有一些带有行尾的特征。