6

特注のIDEは、バイナリファイルのように見えるエンコーディングでXMLファイルを出力します。これらのファイルの差分とマージは失敗します。

コマンドを使用して、これらのファイルのASCIIバージョンを作成できますtr。これらのファイルがコミットされる前に、常に自動的にASCIIに変換される状態にしたいと思います。

私はGitでバージョン管理のコピーを手に入れましたが、本当に必要な場合を除いて、フックを使用しないように心から警告しています。

この目的でフックを使用する必要がありますか?または、コミットする前にファイルが常に変換されるようにするために何か他のことをすることはできますか?

msysgit1.7.4を搭載したWindowsXP

-=更新=-

あなたの助けと忍耐をみんなに感謝します。この質問を見て、私は次のことを試しましたが、機能しません:

echo "*.xrp    filter=xrp" > .git/info/attributes
git config --global filter.xrp.clean 'tr -cd '\''\11\12\15\40-\176'\'''
git config --global filter.xrp.smudge cat
git checkout --force

この構成の変更後、ファイルは変更されません。削除して再チェックアウトしても。

trクリーンタスクとして設定されたコマンドは単独で機能します。証拠:

$ head -n 1 cashflow/repo/C_GMM_CashflowRepo.xrp
ÿþ< ! - -   X M L   R e p o s i t o r y   f i l e   1 . 0   - - >

$ tr -cd '\''\11\12\15\40-\176'\' < cashflow/repo/C_GMM_CashflowRepo.xrp | head -n 1
<!-- XML Repository file 1.0 -->

誰かが私の設定の何が問題になっているのかわかりますか?

4

3 に答える 3

6

フックの問題の1つは、フックが配布されないことです。

.gitattributesファイルの差分とコンテンツを管理するためのディレクティブがありますが、別のオプションは属性フィルター(まだ.gitattributes)であり、コミット時にそれらのファイルを自動的に変換できます。
(つまり、クリーンなスクリプトがコンテンツのみに基づいてこれらのファイルを検出できる場合)


このチャットディスカッションによると、 OPSynessoは成功を報告します。

.gitattributes:
*.xrp filter=xrp

~/.gitconfig:
[filter "xrp"]
clean = \"C:/Program Files/Git/bin/tr.exe\" -cd "\\''\\11\\12\\15\\40-\\176'\\'"
smudge = cat

次に、ファイルを変更し、追加、コミット、削除、チェックアウトする必要がありました...そしてそれが修正されました。:)

.gitattributes1人のユーザーだけに関係するのではなく、そのリポジトリのクローンを作成する可能性のあるユーザーの場合、ファイルを変更するよりも、フィルターが宣言されているファイルを追加(およびコミット)する方がよいことに注意してください.git/info/attribute(これは関係ありません)。クローン)。

gitattributesマニュアルページから:

  • 単一のリポジトリのみに影響を与える場合(つまり、そのリポジトリの1人のユーザーのワークフローに固有のファイルに属性を割り当てる場合)、属性を$GIT_DIR/info/attributesファイルに配置する必要があります。
  • バージョン管理され、他のリポジトリに配布される必要がある属性(つまり、すべてのユーザーが関心を持つ属性)は、.gitattributesファイルに入れる必要があります。
  • core.attributesfile1人のユーザーのすべてのリポジトリに影響を与える属性は、構成オプションで指定されたファイルに配置する必要があります。
  • システム上のすべてのユーザーの属性は、$(prefix)/ etc/gitattributesファイルに配置する必要があります。

http://git-scm.com/docs/gitattributes


phyattはコメントに追加します:

sqlite3についてこれに似た例を作成しました。
次の2行で正しいファイルに追加できます。

git config diff.sqlite3.textconv 'sqlite3 $1 .dump'
echo '*.db diff=sqlite3' >> $(git rev-parse --show-toplevel)/.gitattributes 

同様の行を使用して、他のgitconfigパスを書き込むことができます。

于 2011-06-29T08:03:47.137 に答える
2

diffは、そのまま(つまり、ほんの一握りの奇妙なバイトが含まれているが、それ以外はテキストである)で作業する可能性がありますか?もしそうなら、あなたはgitにそれらを。でテキストとして扱うように強制することができます.gitattributes。そうでない場合でも、カスタムの差分スクリプトとマージスクリプト(変換に必要な場合はtrを使用します)を作成し、gitにそれを使用するように指示する方がよい場合があります.gitattributes

どちらの場合も、フック(特定の操作を実行するためのもの)を使用しませんが.gitattributes、ファイル固有のフックを使用します。

于 2011-06-29T07:56:53.997 に答える
2

優先する編集形式がASCIIで、ビルドのみにバイナリファイルが必要な場合は、ビルドルールを使用して、リポジトリにコミットする優先ソースからバイナリバージョンを生成することをお勧めします。

IDEがすでにバイナリ形式でファイルを作成していることを考えると、その形式でリポジトリに保存するのが最善だと思います。

フックではなくgit help attributes、特にdifftextconv特定のパターンに一致するファイルを構成して、別の差分手段を使用できるようにするものを見てください。ファイルの保存方法や編集方法を妥協することなく、動作するASCII差分を生成できるはずです。

編集:ファイルがUTF-16またはUCS-2であることを示唆する「1バイトおきに0」という他の場所でのコメントに基づいています。diffUnicodeを処理できる aについては、この回答を参照してください。gitにUTF-16ファイルをテキストとして認識させることはできますか?

于 2011-06-29T07:56:55.810 に答える