2017-01-11 21 views
2

私の同僚は、mavenプロジェクトでよく使われるpom.xmlファイルの例として、コミットした後にファイルを作成できるかどうか尋ねました。git update-index -assume-unchangedの後のマージに関する問題

git update-index --assume-unchangedがこの状況で役に立つことがわかりました。しかし、私が別のブランチからマージしようとすると、gitは無視されたファイルを追跡しているので、矛盾が起こります。

これを避けるにはどうすればよいですか?すべてのブランチでこのコマンド(git update-index assum-unchanged)を使うべきですか?

+0

おそらく、このジョブでは--assume-unchangedが最適なツールではありませんでした - [これは正しい使い方が説明されています](http://stackoverflow.com/a/23305143/297243) – Tom

答えて

0

コマンドgit update-index --assume-unchanged filenameは2つのブランチでは使用できませんが、一時的にファイルを無視する方法です。ファイルを変更してから別のブランチに切り替えたりマージしたりする場合は、コミットの変更がないので、gitはエラーメッセージを表示します。つまり、ブランチを切り替えたりマージする前にgit update-index --no-assume-unchanged filenameを使用しなければなりません。あなたの状況については

、次の2つの方法の下に参照することができます。

  1. ファイルは、バージョンコントロール任意の複数の操作を行いますする必要はありません。したがって、ファイルを.gitignoreに追加し、git rm --cached filenameを使用してそれをアントラッキングすることができます。
  2. ファイルのバージョン管理が必要です。ブランチをマージするときは、git merge branchname -X ours/theirsを使用してファイルを無効にすることができます。
0

私がコメントしたよう - --assume-unchangedisn't the right tool for this job

According to the Git documentationこれを行うための最善の方法は、git rm --cached <file>を使用することです。

ファイルを作業ツリーに残しておき、ステージング領域から削除することもできます。言い換えれば、あなたのハードドライブにファイルを保存したいが、Gitがこれ以上トラックを追跡しないようにすることができます。これは、.gitignoreファイルに何かを追加するのを忘れてしまった場合や、大量のログファイルや.aのコンパイル済みファイルのように誤ってステージングした場合に特に便利です。これを行うには、--cachedオプション

を使用する次に、あなたの.gitignoreファイルになりました人跡未踏のファイルを追加する必要があると思います。

ブランチの場合、このファイルを追跡するブランチのマージを管理する必要があります。ブランチをマージすると、そのファイルがリポジトリに再び入り込まないようになります。最も簡単な方法は、マージする前に各ブランチでこの変更を行うことです。

0

私は

これは、現在のリポジトリの状態と作業ディレクトリ内のファイルを比較するのではないのgitに指示--assume-変わらないgitの更新インデックスを見つけました。

一方、マージはリポジトリ内のコミットの間に行われます。そのため、同じファイル上で他の人とのマージが変更された場合でも、まだ競合が発生しています。


このような機能が必要な理由は、mavensプロジェクト構成ファイルです。

特にこのファイルを無視したり、scmから除外したりしないでください。それでなぜあなたはそれを必要としますか?

私の推測では、ローカルリソースを指すpomのプロパティを定義していると思います。その場合:settings.xmlの属性を"user.home"/.m2に移動します。これは彼らが所属する場所です。

関連する問題