0

フレームワークとしてcodeigniterを使用しているgitリポジトリがあります。メインのindex.phpは、環境変数( "production"または"development"のいずれかを設定するため、開発ごとに異なります。

これらの2つの異なる環境での変更を無視するようにgitに指示する最良の方法は何ですか?重要なファイルであるため、必ずしも.gitignoreに追加する必要はありません。変更を単純に抑制する方法はありますか?

4

1 に答える 1

2

ファイルを変更したままにして、コミットしないこともできますが、それは非常に面倒です。そして、複数のブランチとリベースを利用する複雑な方法があります。しかし、それも非常に厄介になります。

これに対して私が見つけた最も簡単な解決策は、実稼働環境でスマッジフィルターを使用することです。詳細については、gitbookを参照してください。スマッジフィルターを使用して、チェックアウト時に特定の単語を別の単語に置き換えることができます。

私のセットアップでは、このフィルターを使用します(これをサーバーの.git / configファイルに追加するだけです):

[filter "htproduction"]
    smudge = sed 's/\\$site-mode\\$/$site-mode:production$/'
    clean = sed 's/\\$site-mode.*\\$/$site-mode$/'

このフィルターをアクティブにするには、次の行を.git / info / attributesに追加します(ファイルが存在しない場合はそのファイルを作成します)。

index.php filter=htproduction

これの効果は、サーバー上でのすべての出現が$site-mode$に置き換えられることです。$site-mode:production$次に、index.phpファイルで次のようなことを行います。

if (strpos("$site-mode$", "production") !== false)){
    do_only_on_server();
}

何が起こっているのか、なぜ私がやっていないのか(うまくいかない)を理解するために、スマッジフィルターを読むことを強くお勧めしますif ("$site-mode$" == "$site-mode:production$")

注:この回答は、サーバーでLinuxを実行していることを前提としています。この方法はWindowsでも機能しますが、sedおそらく利用できないでしょう。

于 2012-11-29T00:34:21.807 に答える