4

そのため、大きな VB6 コードベースで git (Windows では Git Extensions 2 を使用) を使用しています。VB6 に慣れていない人のために説明すると、VB6 では大文字と小文字が区別されず、ファイルを保存するたびに変数名の大文字と小文字を変更する習慣があります。この動作を最小限に抑えるための手順はありますが (「Visual Basic 6 で大文字と小文字が変更されないようにする」を参照)、この方法で問題を完全に排除することはできません。もちろん問題は、ケースの変更が Git の変更として表示されるため、実際の変更を見つけるのがほとんど不可能なところまでコミット履歴に干渉することです。

ソース管理側からこれを処理する方法を探しています。ご意見をいただければ幸いです。私が現在追求している手段は、優先順に次のとおりです。

  1. Git diff の大文字と小文字を区別しないようにする - これを行う方法が見つからないようです。文字列の変更も反映されませんが、簡単な修正のために喜んで支払う代償です。
  2. コミットする前に、ケースベースの変更のみでハンクをリセットします。
  3. 大文字と小文字を区別しない差分のオプションがある Visual Source Safe に移動します - いいえ...

オプション番号 2 がおそらく最善の策であると感じていますが、それを処理する最善の方法についてはよくわかりません。私の現在の考え方は次のとおりです。

  • Git コマンドラインを自動化するツールを作成する
  • インタラクティブなプロンプトを使用してすべての変更を反復し、最小のハンクに分割します
  • ハンクごとに、大文字と小文字のみの変更のみの場合は、リセットします

これは可能な限り優れたソリューションであると確信しています。ステージングの前にこのツールを実行すると、すべての問題が解決します。この方法について何か考えている人はいますか?

また、このルートをたどる場合は、ケースのみの変更を防ぐためにGitフックを用意することをお勧めします。このようなものを実装する方法がまったくわからないので、そのようなスクリプトを作成するための助けは素晴らしいでしょう.

問題の規模をある程度理解するために、変数の大文字と小文字が変わると、開いているファイル内の同じ名前を持つすべての変数のすべてのインスタンスが変更されます。コミットするたびに、これはいくつかの変数で発生し、変更された各ファイルの約 30% が変更されたように見えます。これにより、手動プロセス (私が現在行っていること) は非常に非現実的になり、本当に小さなコミットにのみ役立ちます。

助けてくれてありがとう!

4

2 に答える 2

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"
于 2014-11-03T11:32:21.267 に答える