リモートmyrepo
サーバーにbeanstalk
というリポジトリがあります。
ローカルマシンにクローンを作成しました。 staging
とdev
の2つの追加ブランチを作成しました。これらのブランチもリモートにプッシュしました。
今:
local remote server
--------------------------------------------------------
master ==> Pushes to `master` ==> deployed to `prod`
staging ==> Pushes to `staging` ==> deployed to `staging`
dev ==> Pushes to `dev` ==> deployed to `dev`
各ブランチで異なるconfig.xml
というファイルがあります。
マージ中にのみこのファイルを無視します。ただし、レポジトリブランチからチェックアウトまたはコミットするときにこれを含めるようにします。
これが必要な理由は、特定のブランチをプル(チェックアウト)して各サーバーにデプロイするデプロイスクリプトがあるためです。そのため、特定のブランチのconfig.xml
ファイルは、デプロイ時に上記のように特定のサーバーに移動する必要があります。
.gitignore
は機能しないと思います。他のオプションは何ですか?無視されたファイルはチェックアウトとコミットの一部である必要があることに注意してください。これは重要です。マージ中のみ無視する必要があります。
ありがとう!
Git attributes
を見つけました。やってみて。これまでのところ。まだすべてのシナリオをチェックしませんでした。しかし、それは解決策でなければなりません。
--no-commit
オプションを指定したgit mergeコマンドを使用してこの問題を解決し、ステージングされたファイルを明示的に削除し、ファイルへの変更を無視しました。例:myfile.txt
への変更を無視したい場合、次のように進めます。
git merge --no-ff --no-commit <merge-branch>
git reset HEAD myfile.txt
git checkout -- myfile.txt
git commit -m "merged <merge-branch>"
スキップするファイルのリストがある場合は、ステートメント2と3をforループに入れることができます。
.gitattributes
-サブディレクトリまたはファイルのサブセットの属性を定義するリポジトリのルートレベルファイルです。
特定のファイルに対して異なるマージ戦略を使用するようにGitに指示する属性を指定できます。ここでは、ブランチの既存のconfig.xml
を保持します。 merge=ours
ファイルでconfig.xml
を.gitattributes
に設定する必要があります。
merge=ours
は、マージの競合が発生した場合、(現在のブランチ)ファイルを使用するようgitに指示します。
リポジトリのルートレベルで.gitattributes
ファイルを追加します
.gitattributes
ファイルでconfix.xmlの属性を設定できます
config.xml merge=ours
そして、次のようにダミーのマージ戦略を定義します。
$ git config --global merge.ours.driver true
stag
form dev
ブランチをマージする場合、マージがconfig.xmlファイルと競合する代わりに、stagブランチのconfig.xmlは元のバージョンを保持します。
git merge --no-commit
を使用して開始し、config.xml
または他のファイルのステージングを解除して、好きなようにマージを編集し、コミットします。その後、フックを使用してさらに自動化する必要があると思いますが、少なくとも1回は手動で行う価値があると思います。
.gitignore
を使用してconfig.xml
をリポジトリに入れないでから、 コミット後フック を使用して適切なconfig.xml
ファイルをサーバーにアップロードできます。
ここでgit-update-index-作業ツリーのファイルの内容をインデックスに登録します。
git update-index --assume-unchanged <PATH_OF_THE_FILE>
例:-
git update-index --assume-unchanged somelocation/pom.xml
例:
master
、_develop
develop
ブランチにファイルを作成し、マージ中にそれを無視したいコード:
git config --global merge.ours.driver true
git checkout master
echo "path/file_to_ignore merge=ours" >> .gitattributes
git merge develop
同じ拡張子のファイルを無視することもできます
たとえば、.txt
拡張子を持つすべてのファイル:
echo "*.txt merge=ours" >> .gitattributes