2016-02-29 14 views
5

私のマシンでは、--skip-worktreeconfig/database.ymlに設定しました。別のブランチから--skip-worktreeでファイルへの変更を処理する

git update-index --skip-worktree config/database.yml 

別の開発者が、プロジェクトの作業中にconfig/database.ymlに分岐の変更をコミットし、マージしました。私はgit pull origin developを行う際

は今、私は、このような変更を処理する必要がありますどのように

Andrews-Air:[project] agrimm$ git pull origin develop 
From bitbucket.org:[company]/[project] 
* branch   develop -> FETCH_HEAD 
Updating [SHA]..[Another SHA] 
error: Your local changes to the following files would be overwritten by merge: 
    config/database.yml 
Please, commit your changes or stash them before you can merge. 
Aborting 

を取得しますか?実行する必要がありますか

git update-index --no-skip-worktree config/database.yml 
git stash save "Save changes to config/database.yml" 
git pull origin develop 
git stash apply 
# Fix any conflicts 
git update-index --skip-worktree config/database.yml 

また、ハックの少ないアプローチはありますか?

+0

これについて100%は確信していませんが、私はskip-worktreeの使い方でgitを使用しても問題ないと思われます。 'printf'%s \ n '' * ''!config/database/yml '> .git/info/sparse-checkout; git config core.sparsecheckout true'となり、既にskip-worktreeが点灯しているので十分であるはずです。 – jthill

答えて

2

これはまったくハックなアプローチではありません。これは、実際には、あなたがこの状況で行う必要があるものです。シナリオを段階的に進んでみましょう。 (YMLファイルなので、途中でいくつかの前提をしています)

ローカルのビルドプロセスにのみ影響を与える変更があって、間違って他のものや潜在的にそれらの変更をプッシュしたくないのでファイルを無視していますそれらに影響を及ぼすか、またはさらに悪いことに、生産に影響を及ぼす。かなり普通で良いことです。

これらのファイルは、このように変更する必要がある場合があります。この場合、更新されたバージョンがコミットされることがあります。これらの変更をプルすると、上書きしているファイルがコミット中のファイルと一致するかどうかをチェックし、そうでなければエラーをスローします。 (完全性チェックに失敗するとフラグは無視されます)

あなたはファイルを積極的に無視しているので、gitに再度気にする必要があります。そうでなければ、gitプロセスはファイルを表示しません。

git update-index --no-skip-worktree config/database.yml 

そして、どこか安全な変更を入れて、あなたがそれらをコミットしたくないので、スタッシュは最高の場所です:

git stash save "Save changes to config/database.yml" 

あなたは最終的にあなたのローカルにリモートからの変化をもたらすことができますブランチ。元のエラーが発生したときにはすでにフェッチしているので、マージすることもできます。だから、:

git pull origin develop 
-or- 
git merge origin/develop 

あなたは今日までだが、あなたはまだこれらの更新は、それがローカルで動作するようにしたいので、私たちの安全な保管場所から戻ってそれらを取得してみましょう:

git stash pop 

がある場合コンフリクトがあれば、それを解決して、新しい変更を統合した後にプロジェクトが正しく構築されるようにすることができます。

最後に、ローカルの変更から他のユーザーを保護したいので、パス上でskip-worktreeフラグを元に戻します。

git update-index --skip-worktree config/database.yml 

これで完了です。

関連する問題