web-dev-qa-db-ja.com

gitワークフロー:特定のファイルが別のブランチにマージされるのを防ぎながら、バージョン管理下に置くことはできますか?

ライブとステージの2つのブランチを持つリポジトリがあります。リポジトリは、Webベースのアプリケーションのコードを保持します。ステージブランチとライブブランチ用に2つの異なる.htaccessファイルを維持したいのですが、ステージサイトにサービスを提供する性質が少し異なるため、バージョン管理を維持したいと思います(たとえば、現時点では、キャッシュのタイミングを調整したい)別の方法で)。

私はgitの初心者なので、簡単な説明があるかもしれませんが、ライブで変更をプルするワークフローが必要です(単純なgit merge stage)、ライブブランチの既存の.htaccessを上書きしませんでした。これを構成する方法はありますか? gitに大きな概念が欠けていますか?

同様に、変更を追跡したいが、それらをライブにマージしたくない(ただし、おそらく多くの).htmlファイルのチャンクもあります。明確にするために、ライブとステージでこれらのファイルの変更を追跡する必要がありますが、マージを行うときにこれらの特定の変更をマージしないことを知っています。

30
Ankur

私は 別の質問への回答 スタックオーバーフローで見つけました、クレジットはfcurellaに行きます:

ファイルconfig.phpを除外したいとします。

ブランチA:

  1. 同じディレクトリに.gitattributesという名前のファイルを次の行で作成します:config.php merge=ours。これは、ファイルをマージするときに使用する戦略をgitに指示します。この場合、常にバージョンを保持します。マージするブランチのバージョン。

  2. .gitattributesファイルを追加してコミットします

ブランチBの場合:手順1〜2を繰り返します

今すぐマージしてみてください。ファイルはそのままにしておく必要があります。

これは、よりスケーラブルなソリューションのようです。

34
Ankur

Ankur、これを試してください:

ライブブランチにチェックアウトしていると仮定して、次を実行します。

git merge --no-commit --no-ff stage

これにより、2つのブランチがマージされますが、新しいコミットを行う代わりに失敗し、これらの変更がインデックスファイルと作業ディレクトリに残ります。ライブブランチで.htaccessファイルをそのまま保持したいので、ライブからこのファイルをチェックアウトできます。

git checkout live .htaccess

これで、作業ツリーには.htaccessを除いてステージからのすべての変更が含まれるため、マージコミットを完了することができます。

git commit -m "Pulled changes from stage" -a
7
Hakop Palyan