2011-01-09 13 views
3

私のウェブサイト/ CMSはgitで追跡されていますが、私の.htaccessファイルを除いてはうまくいきます。このファイルは、コードを実行しているサーバー(ローカル/テスト/ライブ)によって大きく異なる必要があります。その結果、今、私はgitから完全に.htaccessを保持しています(これは私の.gitignoreファイルにあります)。しかし時にはそれは失われてしまい、いずれにしてもサイトの一部であり、追跡しておきたいのですが、リモートリポジトリにプッシュして他のサーバーの正しい構成を上書きすることは望ましくありません。 gitにファイルを保存させる方法はありますか? (または他の方法で問題を解決してください)リポジトリ上のgitバージョンコントロールファイルをプッシュ/プルすることなし

答えて

2

Gitのsparse checkout機能でこれを行うことができます。

git config core.sparsecheckout true 
echo '*' >.git/info/sparse-checkout 
echo '!.htaccess' >>.git/info/sparse-checkout 
git read-tree --reset -u HEAD 

これは最初の既存.htaccessのファイルを削除します:あなたは特別な、人跡未踏.htaccessファイルをしたいレポで次のコマンドを実行します。しかし、今はGitの観点からは無視されているので、マシン固有のものを置くことができ、Gitはそれについて気にしません。

その他のリポジトリ(ローカルのもの)から.htaccessファイルを追加して管理することができます。 Gitは、このファイルを追跡し、リポジトリに保管させていただきますが、上記のまばらなチェックアウト構成を持つマシン上で、Gitはそれはリポジトリに何が異なっていても、その作業ディレクトリにローカル.htaccessファイルを無視します。

+0

しかし、GitはOPが望んでいるファイルの一部であるファイルを追跡しません。 – Amber

+0

@Amber:回答の更新でさらに説明しました。 –

0

.htaccessを完全に別々のgitリポジトリに保存し、コードがあるディレクトリにシンボリックリンクしてください(元のリポジトリに.gitignoreのままにしておきます)。

0

あなたが複数の支店を持つことができ、各サーバーごとに1つ、各ブランチは、サーバ固有の設定ファイルの独自のバージョンを持つように。その後、マスターブランチを変更すると、他のブランチはそれとマージして最新の変更を取得しますが、独自の設定を保持します。設定ファイルが変更された場合、手動でマージする必要がありますが、これはスクリプトやおそらくgithooksで自動化できるものです。

1

それはあなたの.htaccessファイルの内容のように聞こえるが、展開に固有であるため、実際のコードの一部ではありません。言い換えれば、これらのファイルは、gitに保存されずに、それらのうちの1つがコミットされるたびに変更を無効にするのではなく、各サーバーに合わせてデプロイメントスクリプトによって生成することができます。

0

それはセキュリティ上の問題だ場合Gitは、ファイルの履歴を追跡する場合は、そのリポジトリのクローンを、誰もがすべての履歴を取得する予定ですので、答えは、「なし」になるだろう。しかし、あなたがすべての場所を管理し、それを追跡する方法を望むなら、他の場所でそれをチェックするのを避けるために、おそらくgit smudgeとgit cleanフィルタがあなたのために何かをするかもしれません。ファイルをチェックアウトしてコミットすると、ファイルの内容を編集することができます。私はそれが適切だとは確信していませんが、私は実行可能な解決策を考案しようとしています。

また、別の名前(「.htaccess」ではなく)でファイルを追跡し、該当する場合は、該当する場合にのみ、追跡名に.htaccessというシンボリックリンクを作成します。

関連する問題