私はいくつかの生成されたが、強く必要なライブラリファイルを生成するIDEで作業しています。ですから、ライブラリを複数のバージョンで使用したい場合や、実際には意味のない変更の負荷がある場合は問題があります。git filterは 'unmodifying'ファイルではありません
概要:私はgitののフィルタが正しいアプローチされていると思った1つのまたは複数のファイルの単一行を無視します。私はgrep
を読むことができるかもしれないので、問題なく関連する行のためにできる。
私はgitフィルタをセットアップして、ヘッダーファイル内のバージョンの変更を元に戻しました。 (このファイルに関連するさまざまな変更がある場合がございますのでご了承ください。)
[filter "ignore-version"]
smudge = cat %f || cat
clean = git ls-files %f --error-unmatch >&- 2>&- \
&& sed \"/version/c $(git show HEAD:%f | grep version)\" || cat
(私はより良い読書のために改行をエスケープし、簡単にするために一致する単語を変え追加しました。元のバージョンでは衝突がありません可能。)ファイルはリポジトリ内にすでにある場合
git ls-files
チェック(現在HEAD)
1.1存在する場合、sed
は先に行くしかないだろう1
1.2ではない場合、cat
を追跡し、既にして行全体を置き換えるために汚い仕事をしますので、
(これは、失われた取得することはありません、まだ追跡されていないファイルを確認する必要があります)遠く、それは動作します。
問題(私は...フィルタは黙っすべてCRLF LFに変換しているという事実と一緒に暮らすことができます):gitのによって変更された固定ファイルがマークされ、リポジトリの最新のファイルが、フィルタリングされたバージョンは2進数である。別のツールとしてkdiffを使ってこれをチェックしました。
編集1:
$ git show HEAD:file.txt | md5sum
9f95c28cebe4f45b8efb7b0ae64dfa56
$ cat file.txt | md5sum
894e7d1b28180b7a193bf3cdd6ceaacb
$ cat file.txt | git ls-files file.txt --error-unmatch >&- 2>&- \
&& sed \"/version/c $(git show HEAD:file.txt | grep version)\"
|| cat | md5sum
9f95c28cebe4f45b8efb7b0ae64dfa56
編集2:ここでは、2つのファイルバージョンの平等を示すいくつかの出力でさらに、差の出力が..
$ git diff file.txt
warning: LF will be replaced by CRLF in file.txt.
The file will have its original line endings in your working directory.
ご注意くださいこのファイルのチェックインされたバージョンには、前回のコミットと同じようにLFが含まれています。また、core.autocrlf
の設定は、.gitattributes
ファイルのフィルタ指定以外の何もせずに、真のです。
これをLinuxマシンで、ゼロからリポジトリを使って再現しました。同じコマンドがそれを行います!だから、明らかに、Windowsマシン上でのgitと改行の使用に問題があります。私はすべてのgitの設定を試みましたが、誰も動作しませんでした。 – maxik
https://stackoverflow.com/questions/17628305/windows-git-warning-lf-will-be-replaced-by-crlf-is-that-warning-tail-backwar – Gimby
@Gimbyこの警告に従っていたはずですリンクの背後にある説明は解決策ではありませんでしたが、正しいと思いました。とにかくありがとう。 – maxik