Git (ローカル Git または Github API 経由) からテキスト ファイルをプルし、さまざまなシナリオでコミット/ツリー/ブロブ データを使用する Node.js 用のコードがいくつかあります。しかし、私 (またはユーザー) がファイルを使用した後、行末と sha ハッシュの再計算に問題があります。
データはソースコードで構成されています。ユーザーのプロジェクト ディレクトリにダウンロード/使用/リンク/インポートされ、開発に使用されます。git blob ハッシュを使用して、ソース blob に関連する変更を確認したいと考えていました。
私のセットアップ:
私は Windows を使用していますが、Travis-CI と VM を使用してビルドを実行しています。
この関数を使用して、sha1-hash を 16 進文字列として計算します。
var crypto = require('crypto');
function blobShaHex(data:NodeBuffer, encoding?:string):string {
return crypto.createHash('sha1').update('blob ' + data.length + '\0').update(data, encoding).digest('hex');
}
これまでのところ、これは非常にうまく機能しているようです。リポジトリから直接生のバッファとして読み取られたデータは、utf8 コンテンツと同じように、ハッシュと一致します。
問題:
BLOB コンテンツの実際のユーザー使用では、行末が BLOB sha1 を分割します。
ファイルが VCS にチェックインされ、行末変換によって破損する可能性があります。また、ユーザーがファイルを保存しない場合でも、ユーザーの IDE が改行をユーザー設定に正規化する場合があります。他にも多くのことが起こる可能性があります。
注: 私のコードは、ファイルが終了する Git リポジトリからBLOB をプルしていません。代わりに、どこかにチェックインされる場合とされない場合があります。
さらに厄介なことに、ソースレポの行末を完全に制御することはできないため、どのスタイルが得られるかについての保証はありません。規則が混在している可能性もあります (技術的に可能であれば?)。
質問:
元の改行に戻すか、一致を確認する方法はありますか? 元のファイルをもう一度プルして、それを処理することができました。
これを処理するためのアドバイスは大歓迎です。
--
今、私はこれをすべて入力しましたが、これを試みるのは本当に非現実的な考えかもしれないと思い始めています. 強制的に正規化して独自のチェックサムを作成して追跡するか、差分を無視する巧妙な空白を使用する方がよいでしょうか?