409

私のチームのすべての開発者は、独自のローカル構成を持っています。devtargets.rbその構成情報は、rake ビルド タスクで使用される というファイルに保存されます。ただし、開発者がお互いの devtargets ファイルを破壊することは望んでいません。

私が最初に考えたのは、そのファイルを.gitignoreリストに入れて、git にコミットされないようにすることでした。

それから私は疑問に思い始めました: ファイルをコミットすることは可能ですが、ファイルへの変更を無視することはできますか? そのため、ファイルのデフォルト バージョンをコミットし、開発者がローカル マシンでそれを変更すると、git は変更を無視し、git status または git commit を実行しても、変更されたファイルのリストに表示されません。 .

それは可能ですか?それは確かに素晴らしい機能でしょう...

4

5 に答える 5

511

確かに、私は時々これを正確に使用して行います

git update-index --assume-unchanged [<file> ...]

元に戻して追跡を再開するには(追跡されていないファイルを忘れた場合は、この質問を参照してください):

git update-index --no-assume-unchanged [<file> ...]

関連ドキュメント

--[no-] assert-unchanged
このフラグを指定すると、パスに記録されているオブジェクト名は更新されません。代わりに、このオプションは、パスの「変更されていないと見なす」ビットを設定/設定解除します。「変更なしと見なす」ビットがオンの場合、ユーザーはファイルを変更しないことを約束し、作業ツリーファイルがインデックスに記録されているものと一致するとGitに想定させます。作業ツリーファイルを変更する場合は、Gitに通知するビットの設定を解除する必要があります。lstat(2)これは、システムコールが非常に遅いファイルシステム(cifsなど)で大きなプロジェクトを操作する場合に役立つことがあります。

インデックス内のこのファイルを変更する必要がある場合、たとえばコミットでマージする場合など、Gitは(正常に)失敗します。したがって、想定される追跡されていないファイルがアップストリームで変更された場合は、状況を手動で処理する必要があります。

この場合、正常に失敗するということは、プルを実行するときにそのファイルのアップストリームに変更(正当な変更など)がある場合、次のように表示されることを意味します。

$ git pull
…
From https://github.com/x/y
   72a914a..106a261  master     -> origin/master
Updating 72a914a..106a261
error: Your local changes to the following files would be overwritten by merge:
                filename.ext
 

マージを拒否します。

その時点で、ローカルの変更を元に戻すことでこれを克服できます。これが1つの方法です。

 $ git checkout filename.ext

次に、もう一度プルしてローカルファイルを再変更するか、設定–no-assume-unchangedして、その時点で通常のスタッシュやマージなどを実行できます。

于 2010-07-23T16:20:02.527 に答える
48

一般的な方法は、を作成しdevtargets.default.rbてコミットし、各ユーザーにそのファイルをdevtargets.rb(.gitignoreリストにある)にコピーするように指示することです。たとえば、CakePHPは、マシンごとに自然に変化するデータベース構成ファイルに対して同じことを行います。

于 2010-07-23T15:24:35.943 に答える
2

IntelliJ IDEA ユーザーの場合: ファイル (または複数のファイル) の変更を無視したい場合は、別の に移動できますChange Set

  • Local Changes( Cmd + 9)に向かう
  • 無視したいファイルを選択
  • F6それらを別の場所に移動するにはChange Set
于 2015-10-29T10:38:04.390 に答える