1

私は少し珍しい振る舞いをするプロジェクトに取り組んでいます:

ソースコード内のファイルの1つは、深刻なコードを含むファイルですが、それ自体を編集して、いくつかの構成を含めることもできます。これが優れた設計であるかどうかは別の議論ですが、私のプロジェクトをテストできるようにするには、このファイルを変更した状態にする必要があります。

私は何かをコミットする前に、通常、貢献の前後の状況をAB比較します。git stash私はベースとダーティな作業コピーを切り替えるために使用します。問題は、を使用するgit stashと、config-thingも元に戻されることです。

私の現在の回避策は面倒です。私はaを実行してから実行しますが、git add path/to/settingsfileこのgit stash --keep-index回避策はかなり嫌いです。特に指定しない限り、gitにこのファイルへのすべての変更を無視させるより洗練された解決策はありますか?

4

1 に答える 1

1

ブランチのチェックアウト間でgit--assume-unchangedファイルを保持する」を参照してください。

 git update-index --skip-worktree -- path

それはから戻されませんgit stash


元の回答

一時的にファイルを無視する」から:

 git update-index --assume-unchanged <file>

これにより、その特定のファイルへの変更を無視できます。ただし、構成の変更を同じファイルに保持しながら
コードの変更を元に戻したい場合は、これは役に立ちません。

そして、git stashはそれを元に戻します:git stashが「変更されていないと仮定する」ビットを使用してファイルへの変更をドロップしないようにするにはどうすればよいですか?


Git 2.25(2020年第1四半期)より前git stashは、対象領域外の誤って削除されたパスがまばらにチェックアウトされている作業ツリーに「保存」することに注意してください。

Johannes Schindelin()によるcommit 4a58c3dcommit 8dfb04a(2019年10月30日)を参照してください。( Junio C Hamanoによってマージされました---コミット57b5301、2019年11月10日dscho
gitster

stash:スキップワークツリーファイルの段階的な変更を正しく処理する

サインオフ-作成者:Johannes Schindelin

ビットでマークされたファイル(たとえば、スパースチェックアウトで除外されたファイル)git stashに対して変更がステージングされているときに呼び出すと、ファイルは代わりに削除済みとして記録されます。skip-worktree

その理由は、git stash基本的にインデックスを一時的なものにコピーし、ワークツリーからファイルを更新することによって、ワークツリーを反映したツリーを構築しようとするためです。
重要なgit diff-indexのは、HEADにあるが、インデックスでステージングされていないファイルも更新することです。

ただし、一時インデックスがを介して更新されるgit update-index --add --remove場合、skip-worktreeエントリは、ファイルを誤って削除済みとしてマークします。

--ignore-skip-worktree-entries新しく導入されたオプションを使用して、これが発生しないようにしましょうgit update-index

回帰テストケースは、上記のシナリオの複製を意図的に回避し、代わりに症状のみを再現しようとすることに注意してください。

ダントンプソンによって報告されました。

于 2012-12-11T10:25:20.877 に答える