3

Gitに変更の一部を無視させ、コミットしないようにするためのよりクリーンな方法はありますか?.gitattributes:

config_to_be_deviated.xml filter = qqq

.git / config:

[フィルター"qqq"]
 clean = "perl -ne'/git_please_dont_look_here/でない限り印刷'"
 スマッジ=(Q = $(mktemp)&& cat> $ Q && patch -s $ Q </ tmp / pp && cat $ Q && rm $ Q)

パッチ/tmp/ ppは、各行に「git_please_dont_look_here」を付けて変更を追加します。Gitは、ファイルをリポジトリに入れる前にそのような行をすべて削除し、チェックアウトするときに変更を読み取ります。に有用な変更を追加してコミットし続けることはできconfig_to_be_deviated.xmlますが、パッチの変更はGitに表示されません。

4

5 に答える 5

2

この「フィルター」アプローチが私に最も適しているようです。

長所:

  1. 毎回カスタムスクリプトや特別なコマンドを使用する必要はありません。1回限りのセットアップ。
  2. 履歴や隠し場所に余分なコミットはありません。差分とパッチをクリーンアップします。
  3. 間違ったことを犯すという低いリック。
  4. スマッジとクリーンの両方のための単純なsedスクリプトのように、(構成ファイルの一部のポート番号をオーバーライドするなど)小さな逸脱を比較的簡単に行うことができます。

短所:

  1. フィルタプログラムは、Gitがファイルを読み書きするたびに実行されるため、速度が低下する可能性があります(特にWindowsの場合)。
于 2010-02-12T14:52:23.730 に答える
1

それらを別のファイルに入れ、gitでファイルを無視し、ビルドに接続して含まれるようにしますか?

于 2010-02-12T02:55:04.057 に答える
1

試してみてくださいgit update-index --assume-unchanged --<path>。ソース管理下にあるファイルのgitignoreのように機能します。ただし、この機能の本来の目的は、多数のファイルを含むフォルダーでのgitチェックの変更のパフォーマンスを向上させることでした。これがドコです:

--assume-unchanged
--no-assume-unchanged

これらのフラグを指定すると、パスに記録されているオブジェクト名は更新されません。代わりに、これらのオプションは、パスの「変更されていないと見なす」ビットを設定および設定解除します。「変更なしと見なす」ビットがオンの場合、gitは作業ツリーファイルの変更の可能性のチェックを停止するため、作業ツリーファイルを変更するときにgitに通知するために、ビットを手動で設定解除する必要があります。これは、lstat(2)システムコールが非常に遅いファイルシステム(cifsなど)で大きなプロジェクトを操作する場合に役立つことがあります。

このオプションは、追跡されたファイルのコミットされていない変更を無視するための大まかなファイルレベルのメカニズムとしても使用できます(追跡されていないファイルに対して.gitignoreが行うことと同様)。明示的なgitadd操作により、ファイルが作業ツリーから更新されることを覚えておく必要があります。インデックス内のこのファイルを変更する必要がある場合、たとえばコミットでマージする場合など、Gitは(正常に)失敗します。したがって、想定される追跡されていないファイルがアップストリームで変更された場合は、状況を手動で処理する必要があります。

于 2010-02-12T03:08:30.027 に答える
1
  • 正規のデフォルト構成をgitツリーに配置しますが、それを使用してゲームをプレイすることはできません。それはツリー内にあり、変更を加えるとコミットされます。
  • ソフトウェアはデフォルト構成を探しますが、開発者のホームディレクトリでも構成を探します。両方が見つかった場合は、2つをマージします。開発者の構成ファイルにある構成項目はすべて、デフォルトの構成ファイルにある構成項目をオーバーライドします。

これで、デフォルトの構成が追跡されますが、デフォルトの構成のカスタマイズは追跡されません。

于 2010-02-12T15:10:51.773 に答える
0

私はgitに精通しているわけではありません。Mercurialでは、そのようなものにパッチキュー(MQ)またはシェルフ(git stashに類似)を使用します。

git stash「ローカライズ可能」な場合は、情報を簡単に見つけることができます(たとえば、すべてを1つの構成ファイルで)。

パッチキューの使用はもう少し複雑ですが、ローカライズ可能な情報を透過的なプッシュ/ポップ方式で管理できるため、正しくセットアップすると優れています。パッチキューのリストは、ここSOのgitの上にあります。

于 2010-02-12T14:21:17.963 に答える