3

Git リポジトリで追跡される自動生成された JavaScript ファイルがあります。問題は、コメントに (役に立たない) タイムスタンプが含まれていることです。これにより、些細なマージの競合が発生することがよくあります。これらの衝突は避けたいと思います。

.gitattributes と filter/smudge で解決策を見つけたと思いました。コミットまたはチェックアウト時にこのタイムスタンプ行がファイルから削除されるように、次のように設定しました。

.git属性:

<the file>.js filter=tsfilter
<the file>.js smudge=tsfilter

.git/config:

[filter "tsfilter"]
      clean = perl -pe \"s/\\/\\/.*<the pattern>.*$//\"
      smudge = perl -pe \"s/\\/\\/.*<the pattern>.*$//\"

これにより、マージの競合が解消されたように見えますが、このファイルが常に変更されたままになっているという別の問題が発生しました。つまり、「ステータス」は、ローカル (事前にフィルター処理された) コピーにタイムスタンプ行が含まれているため (ただし、コミットされたファイルには含まれていない)、変更済みとして表示されます。

マージの競合を回避するだけでなく、ファイルのこの部分へのローカルの変更を非表示にするより良い方法はありますか?

4

2 に答える 2

3

あなたの質問を間違って解釈している可能性がありますが、問題のファイルに対して、oursまたはtheirsマージ戦略のいずれかで間に合わせることができるようです。この質問への回答に基づいて、次のことができます。

.git属性:

file.js merge=ours

.git/config:

[merge "ours"]
    name = Keep my file
    driver = true

これにより、ファイルのバージョンが常に保持されます。

theirsマージは少し難しいだけです。ドライバーを に変更するだけではなく、false変更を保持するスクリプトを定義する必要があります。上にリンクされた質問は、theirs戦略をより詳細にカバーしています。

于 2012-11-17T00:17:50.017 に答える
1

そのファイルを生成するプログラムを変更してタイムスタンプを含めないようにするか、タイムスタンプを削除するプログラムのラッパーを作成することができます。

于 2012-11-17T01:21:00.517 に答える