git 操作でバイナリ ファイルを処理する簡単な方法はありますか? この場合の私の理想 - .mo ファイル (バイナリ .po メッセージ) の「マージ」 - は、新しいファイルを優先し、古いファイルの上にコピーすることだと思います。
では、これを行うように git を構成できますか、それとも常に手動で行う必要がありますか?
gitattributes ファイル(このSO questionを参照) にカスタム マージ ドライバーを追加できます。これは、ファイルに対してのみ、関連するディレクトリにのみ追加できます。*.mo
echo *.mo merge=keepTheir > dirWithMoFiles\.gitattributes
git config merge.keepTheir.name "always keep theirduring merge"
git config merge.keepTheir.driver "keepTheir.sh %O %A %B"
次のようにkeepTheir.sh
:
mv -f $3 $2
exit 0
基本的に、この概念はここでうまく説明されていました 特定のファイルで競合するマージのためにローカルバージョンを常に選択するようにgitに指示するにはどうすればよいですか?
ここに記載されている手順を簡素化する bash スクリプトを次に示します https://github.com/equivalent/git_to_svn_behavior-
(Readme で実行する手順)
最善の方法は、生成されたファイル (.mo ファイルなど) をバージョン管理下に置かないことです。
それでも Git に保持したい場合は、標準的な方法を使用して競合を解決してください。
たとえば、競合するファイルのいずれかのバージョンを取得できます。
git checkout --theirs -- dir/file.mo
git checkout --ours -- dir/file.mo
またはgit mergetool
、競合するファイルの両方のバージョンを提供する which を使用します。