単純に追加してコミット(およびプッシュ)することができます(もちろん、ファイルとscript/mergeScript
一緒に).gitattributes
それは次の場合に機能します:
mergeScript
どういうわけか$PATH
、マージドライバーを実行しているユーザーの中にあります。
mergeScript
実行可能であり、chmod +x
mergeScript
は拡張機能なしで、必要に応じて後でコンテンツを変更できるようにします(bashシェルからPerlスクリプト、C実行可能ファイルから...)。
(コメントで言及したように、最後の2つのポイントについてMestreLionに感謝します)
.
' 'があなたの中にあったと私が思うので、それはあなたのローカルの場合でした$PATH
、しかしあなたは皆のためにそれを仮定することはできません。
ただし、ローカル構成ファイル(.git/config
)はプッシュ/クローンされないため(Alexandr Priymakがコメントで指摘しているように)、ユーザーはカスタムマージドライバーの宣言を複製する必要があります。
これは、次のマージ時に自動的に実行される可能性のある「有害な」スクリプトをプッシュしないようにするための基本的な安全対策です。
を使用する別の方法Makefile
もう1つのオプションは、すべてのgitドライバーと.gitattributes
バージョン履歴を保持し、すべてのドライバーを簡単にアクティブ化できるものを含めることです。たとえば、リポジトリ内のすべてのgitドライバーをアクティブ化するMakefile
特別なターゲットを持つ1つのプロジェクトが使用されました。make gitdrivers
これが必要なのは、git
カスタムドライバーを潜在的なセキュリティの脆弱性と見なし、新しいドライバーに信頼を与えるために何かをする必要があるためです。マージドライバーとその他のフックは、ユーザーのクレデンシャルで実行される実行可能コードであり、gitアクションの副作用として自動的に開始されるため、そのコードを実行する前に、明らかに特別な注意を払う必要があります。
ドライバーをアクティブ化するために変更するコードを実行する.git/config
ことは、信頼を付与するgitスタイルです。
実際には、Makefile
そのために使用できます(ただし、プロジェクトに適したビルドシステムまたはスクリプトを使用できます)。Ubuntu Linuxホストの場合、次のように簡単に実行できます(3つのドライバーを使用した例)。
ファイル内.gitattributes
:
[attr]POFILE merge=merge-po-files
[attr]IMAGE diff=image
[attr]BINARY diff=binary -merge -text
locale/*.po POFILE
data/*.img BINARY
*.png IMAGE
およびin Makefile
(インデントはU + 0009 TAB文字のみで行う必要がありますが、stackoverflow.comはここではサポートしていません):
developer-dependencies:
sudo apt install required-package1 required-package2
submodules:
@echo "Overwriting submodules with committed versions..."
git submodule sync
git submodule update --init
gitdrivers: developer-dependencies submodules
@echo "Overwriting git drivers with current version..."
git config merge.merge-po-files.driver "./bin/merge-po-files %A %O %B"
# show rough thumbnails in text mode for images
git config diff.image.textconv "./bin/image-textconv"
git config diff.image.binary "true"
git config diff.image.cachetextconv "true"
# show some extra information about binary files
git config diff.binary.textconv "./bin/binary-textconv"
git config diff.binary.binary "true"
@echo "All git drivers done."
ここで、ファイルmerge-po-files
、image-textconv
およびbinary-textconv
はプロジェクトサブディレクトリ内の適切な実行可能ファイルですbin
。複数のプラットフォームで動作する必要があるプロジェクトがある場合は、現在のプラットフォームの正しいバイナリをビルド/リンクするための追加の依存関係があります。
設定例git
では、diffで画像のASCIIプレゼンテーションをレンダリングし、gettext .POファイルを特別なマージドライバーでマージし、git
ヒューリスティックがそれらをテキストとして宣言している場合でも、選択したバイナリファイルをマージしないように指示しています。代わりに、としてマークされたファイルに対していずれかのバージョンを選択する必要がありますBINARY
。BINARY
そして、diff内のファイルの特別なユーザーに表示される要約を表示します。
このように、すべての開発者make gitdrivers
は、最初のクローンを作成した後に1回実行するだけで済みます。また、後で作業コピーをマージまたはリベースするときに、すでにインストールされているドライバーの更新を自動的に取得します。また、最新のドライバーを使用しているかどうかわからない場合は、いつでも同じコマンドを再実行できます。上記の例では、実際に必要なものである場合とそうでない場合があるすべてのサブモジュールがリセットされることに注意してください。
TL; DR: .git/config
リポジトリには含まれていませんが、コマンドを使用して適切な構成を再作成するスクリプトを含めることができgit config
ます。UNIXライクなシステムの場合、シェルスクリプトは素晴らしいです。プロジェクトでコードをビルドする必要がある場合は、必要に応じて、プロセスをビルドするために必要なドライバーをフックインストールできます。また、構成ファイルを直接変更するのではなく、コマンドを使用する方がはるかに安全であることに注意してくださいgit config ...
。これらのコマンドは、その構成ファイルのファイル形式が将来変更されても機能し続けるためです。