10

次のディレクトリ構造があります。

project/
    .git/
        ...
    app/
        ...
    config/
        initializers/
            braintree.rb
        environments/
            production.rb
    .gitattributes

私のプロジェクトでは、master と staging という 2 つのメイン ブランチを使用し、それぞれが異なるリモート (本番およびステージングの heroku アプリ) を追跡します。

アイデアは、ステージング ブランチが新しい機能で前進し、それらがステージング リモートにプッシュされてテストされ、次にマスターがステージングに一致するように早送りされ、本番リモートにプッシュされるというものです。

私がやりたいことは次のとおりです。これらの 2 つのブランチを自由にマージしながら、 と のバージョンを別々に保ちbraintree.rbますproduction.rb

これを達成するために、ここに私が入れたものがあります.gitattributes(ProGitの本に従って):

config/initializers/braintree.rb merge=ours
config/environments/production.rb merge=ours

ファイルは両方のブランチに存在します。

私が直面している問題は、これが何にも影響を与えていないように見えることです。2 つをマージするたびに、とにかくファイルが変更され、再度変更する必要があります。

私は恐ろしく明白な何かが欠けていると感じていますが、今のところそれは私を逃れています. ここでの他の回答にはカスタムマージドライバーの作成が含まれていることは知っていますが、ProGitの本ではこのプロセスについて言及されておらず、oursドライバーが組み込まれていることを暗示しているようです(そして、マニュアルページで言及されているのを見たので、比較的確実です)。私が考えることができる唯一の他のことは、どういうわけか.gitattributes間違った場所に入れたか、その内容をめちゃくちゃにしたことですが、それに関する多くの情報を見つけることができません. ファイルと同じディレクトリに移動しようとしましたが、役に立ちませんでした。

参考までに、私は OS X で git バージョン 1.7.2 を実行しています。

4

1 に答える 1

4

この問題に対処する 2 つの優れたスタック オーバーフロー応答があります。

特定のファイルで競合するマージに対して常にローカル バージョンを選択するように git に指示するにはどうすればよいですか?

.gitattributes とファイルの個別のマージ戦略

最初のリンクの一番上の回答を読むことをお勧めします。長いですが、とても詳しくて参考になります。

于 2012-04-04T14:14:01.387 に答える