10

私がやりたいことは、その質問ですでに説明されています。しかし、私はその問題を実用的でより一般的な方法で解決したいと考えています。したがって、ユースケースは次のとおりです。

  • web.configいくつかのファイル、createDb.sqlまたはその他のファイルにいくつかのローカル変更があります
  • 変更はローカル マシンにのみ固有であるため、これらのファイルをコミットしたくありません。
  • これらのファイルはバージョン管理されている必要があり、さらに一部のファイル (特に SQL スクリプト) は頻繁に変更されるため、これらのファイルの更新を受け取りたい
  • 他のすべてのファイルをコミットたい
  • 摩擦なく、1 つのコマンドでそれを実行できるようにしたい (posh-git を使用するため、powershell は大歓迎です)

使用すると言われているリンク先のソリューションは実用的git add -pではありません。チャンクを常に手動で選択するのは退屈ですか、それとももっと便利な方法がありますか?

たとえば、次のいずれかが機能します。

  • インデックスに追加する前に作業コピーにあるファイルをフィルタリングする機能がある場合、git -add -A -EXCEPT web.config crateDb.sql. 次に、git エイリアスをそれにマップできます。それだけです。
  • スタッシュの適用を解除する機能がある場合。ある特定のスタッシュに含まれる変更を作業コピーから削除するという意味です。git stash -deapplyそのため、各コミットの前に次のようなことを行う必要がありますが、これも問題ありません。

この問題は非常に一般的であり、現在解決策がないのは奇妙です。たとえば、TortoiseSVN には "ignore-on-commit" 機能があり、Perforce ではそのタイプのローカル変更を別のチェンジリストに保存し、決してサブミットしないようにできます。

4

1 に答える 1

10

git commit の前に次のことを試すことができます。

git update-index --assume-unchanged web.config crateDb.sql

git ヘルプから:

-- 変更されていないと仮定

-- 想定外 - 変更なし

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

このオプションは、追跡されたファイルのコミットされていない変更を無視するための粗いファイルレベルのメカニズムとしても使用できます (追跡されていないファイルに対して .gitignore が行うことと同様)。コミットでマージする場合など、インデックス内のこのファイルを変更する必要がある場合、Git は (正常に) 失敗します。したがって、想定されていない追跡対象ファイルが上流で変更された場合は、手動で状況を処理する必要があります。

于 2012-04-19T20:26:55.353 に答える