2

Git のスマッジ/クリーン フィルターを使用して、環境によって異なるファイルを作成しようとしています。

私のレポには、次のファイルがあります。

/root/scripts/data.config.local
/root/scripts/data.config.staging
/root/scripts/data.config.production

開発者のマシンでチェックアウトが発生したときに、data.config.local ファイルを「data.config」として /root/scripts ディレクトリにコピーする必要があります。

私のグローバル .gitconfig には、次のフィルター定義があります。

[filter "copyEnv"]
  clean = "rm -f c:\\code4x\\git\\rgpstage\\scripts\\gg_data.config"
  smudge = "cp c:\\code4x\\git\\rgpstage\\scripts\\gg_data.config.local c:\\code4x\\git\\rgpstage\\scripts\\gg_data.config"

スクリプトを別のスクリプト ファイルに移動するなど、これらのフィルターでさまざまなバリエーションを試しました。スマッジ用の別のスクリプト ファイルは次のようになります。

#! /usr/bin/bash
cp "C:\Code4X\GIT\rgpstage\scripts\gg_data.config.local" "C:\Code4X\GIT\rgpstage\scripts\gg_data.config"

フィルター アクションに使用するアプローチ (インラインまたはファイル) に関係なく、次の出力が得られます。

error: cannot feed the input to external filter c:\removeGGData
error: external filter c:\removeGGData failed
cp: cannot stat `C:\\Code4X\\GIT\\rgpstage\\scripts\\gg_data.config.local': No such file or directory
error: cannot feed the input to external filter c:\copyGGData
error: external filter c:\copyGGData failed 1
error: external filter c:\copyGGData failed

Git 1.8を使用して、これをWindows 7で実行しています。ファイルは存在し、アクセス許可に関して開かれています。

4

1 に答える 1

1

あなたは汚れときれいなフィルターについて誤解しているようです(ところで–あなたの.gitattributesはどのように見えますか?)。あなたがしているのは、その機能の深刻な悪用です。これらのフィルターは、ファイルをフィルター処理することを目的としており、STDOUTでフィルターされたバージョンが返され、STDINでファイルに渡されます。これらのフィトラーは絶対に副作用がないはずです。

したがって、異なるマシンで異なる構成を実現するには、それらをすべて同じファイルに入れ、スマッジフィルターからの情報を使用するifステートメントで囲むことをお勧めします。詳細については、ここで私の答えを参照してください:https ://stackoverflow.com/a/13616911/758345

于 2013-03-07T07:14:45.747 に答える