1

Git、IntelliJ、Maven を使用しています。IntelliJ の構成ファイルでいくつかの問題が発生します。mvn cleanたとえば、*.iml ファイルは、プロジェクトがビルドまたは再ビルドされたか、または " " が実行されたかによって、常に変化します。IntelliJ には、これらのファイルが変更される原因となるバグがいくつかあることを認識しています。

計画ではgit update-index --skip-worktree、すべての *.iml ファイル (およびその他のファイル) に " " を使用する予定でした。このようにして、1 人の開発者がこれらのファイルの適切な状態を維持し、(新しい依存関係またはモジュール) を変更して追跡を再度有効にする必要がある場合は、ファイルを変更してから変更をスキップするように切り替えることができます。したがって、他の開発者は更新されたファイルを取得しますが、その変更は git リポジトリにプッシュされません。

http://fallengamer.livejournal.com/93321.htmlによると、これは機能する可能性があります。

これは、ローカルのテスト リポジトリで機能しました。しかし、リモコンに移動すると、動作が異なり始めました。" git status" は何もする必要がないことを示していますが、ブランチを切り替えると、ローカルの変更が上書きされるというメッセージが表示されます (主に *,iml ファイルは「無視されます」) git ls-files -v。IntelliJ には、同じ警告が表示された空のウィンドウがあるため、かなり混乱します。

「skip-worktree」オプションのどこが間違っていましたか? マージしても生き残れないはずですか?それとも、その動作は別の目的のためのものですか?

ありがとう!

4

1 に答える 1

2

この動作は意図されたものです。 git update-index --skip-worktree(および同様のオプション--assume-unchanged) は、ステータスからいくつかの変更を隠すことを目的としています。マージするときに、マージによってこれらのファイルが変更されようとしている場合、単に変更を上書きするのではなく、Git がそのことについて警告するのは良いことだと思います。

それについて次のようにman git-update-index述べています。

作業ディレクトリのバージョンは、存在する場合と存在しない場合があります。存在する場合、その内容はインデックスのバージョンと一致するかどうかにかかわらず可能性があります。書き込みはこのビットの影響を受けません。コンテンツの安全性は依然として最優先事項です。Git は、安全に実行できる場合 (つまり、作業ディレクトリのバージョンがインデックス バージョンと一致する場合)、skip-worktree とマークされた作業ディレクトリ ファイルを更新できることに注意してください。


IntelliJ の動作についてはgit status、一部のファイルがこのフラグでマークされているかどうかもチェックしないため、違いを表示しようとすると、マージを妨げる変更を見つけることができません。関連するいくつか の問題に投票することができます--assume-unchanged(それらはおそらくまったく同じです--skip-worktree)。

于 2012-07-26T14:59:55.743 に答える