2016-10-13 6 views
1

開発環境用に変更する必要のある情報(URLなど)を含む多数の設定ファイルがあります。開発環境をgitのブランチとして作成し、設定ファイルを変更します。問題は、開発ブランチをマスターブランチにマージすると、マスターブランチの設定ファイルが変更されることです。マスターの設定ファイルを変更せずにGitでどのようにマージできますか?

gitにファイルを保存したいので、.gitignoreを使用できるとは思われません。私たちは弾力のある豆腐を使用しており、毎回ソース全体を展開する必要があるため、ソースのすべてをリポジトリに保存する必要があります。

How do I tell git to always select my local version for conflicted merges on a specific file?のように.gitattributesを使用して多くの投稿を読み込もうとしましたが、.gitattributesで設定したマージドライバは、両方のファイルが変更された場合にのみ呼び出されます。私たちの場合、マスターブランチの設定ファイルは変更されないので、マージドライバは決して呼び出されません。

スクリプトを作成せずにこれを行う簡単な方法はありますか?

答えて

0

リベースやフェッチなどのgitコマンドを数多く研究した後、私はこれを行う簡単な方法を見つけました。孤児としてブランチを作成し、それに設定ファイルをコピーし、コマンド "git checkout configs_branch - 。"を使用して、基本的に設定ファイルを親ブランチにコピーします。詳細だから、

gitのは、リモートの原点(リモートリポジトリのURL)を追加レポのURLをgitのレポを初期化

あなたがしたいブランチであることを確認してください

孤立したブランチとして設定ファイルを含むブランチを作成するブランチは、ソース

Gitチェックアウト--orphan configs_branch

のすべてのレポのこのブランチに設定ファイルをコピーし、ファイルを追加、コミット、および

Gitリポジトリをプッシュが含まれていないこと追加します。

Gitは "初期設定ファイルをコミットする" 親ブランチから

SUCCESSFUL MERGE AFTER

Gitのプッシュ原点configs_url

Gitのチェックアウトparentbranchname

-mをコミット

Gitは--all

をフェッチ

Gitのチェックアウトconfigs_branch設定ブランチから親枝にファイルをコピーします - 。

Gitは

おかげで@vampire "設定ファイルのリセット" -mをコミット

は、ファイルをコミット(あなたはまだ、上記のコマンドの後に親ブランチになります)あなたの助けに!

0

解決方法は簡単です。設定ファイルをコミットしないでください。

テンプレート設定ファイルを作成してコミットします。アプリケーションをインストールするときは、テンプレートをコピーして、変更する必要があるものを変更します。誤ったコミットを避けるために、.gitignoreに実際の設定ファイルを保存してください。

高度な使い方は、アプリケーションのデフォルトとローカルオーバーライドの2つの設定ファイルを作成することです。デフォルトはコミットされ、ローカルオーバーライドはコミットされません。この方法の利点は、必要なものだけを上書きし、他の値は指定しないままにしておくことです。デフォルトの値が変更された場合、ローカルオーバーライド設定を更新する必要はありません。欠点は、アプリケーションの初期化中に2つの設定ファイルをロードしてマージする必要があることです。

0

スクリプトを書く必要がないソリューションを求めました。私のソリューションはスクリプトを含んでいます。しかし、彼らはすでに書かれています。

1)それぞれのファイルのマージの競合を無視するカスタムマージドライバを作成します。ドライバは、.gitattributes内の各ファイルに登録する必要があります。

2)そのファイルの各コミット時にマージ競合を作成します(そうしないとマージは簡単で、マージドライバは使用されません)。これは、コミット後に各ブランチでそのファイルを変更する.git/hooks/post-commitのコミット後のフックで行うことができます。

いくつかのスクリプトでそれを組み合わせました:https://github.com/keepitfree/faithfulgit

関連する問題