13

GitにSubversionsChangelist機能のようなものがあるかどうかだけ知りたいのですが、その機能はその場で非常に便利です。次のようなものを実行できることはわかっています。

cat 'changelistfileimade' | xargs git update

しかし、組み込みのメソッドもあるかどうか知りたいですか?

4

2 に答える 2

16

これについてもう少しグーグルで調べたところ、上記のコメントで言及したTortoiseSVNignore-on-commitチェンジリストの使用例の代わりを見つけたと思います。問題のコマンドはgit update-index --assume-unchanged <path/name>. Git ヘルプには、これについて次のように書かれています。

--[いいえ-]仮定 - 変更なし

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

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

Nick Quaranto の GitReady blogでオプションの説明を見つけました。次の内容が含まれています。

明らかに、これにはかなりの注意事項があります。ファイルgit addを直接指定すると、インデックスに追加されます。このフラグをオンにしてコミットをマージすると、マージが正常に失敗するため、手動で処理できます。

しかし、それは私にとって戦いの半分にすぎません。次のステップは、何を無視したかを知ることです (できれば、その理由を思い出すこともできます)。これは、適切な名前の質問に対する Abe Voelkerによるこの便利なコメントによって提供されました。.gitconfigスニペットでファイルを編集するだけです

[alias]
    ignored = !git ls-files -v | grep "^[[:lower:]]"

[alias]ファイルに既に存在する場合は、ビットを追加しないでください。そして今git ignored、次のようなことを教えてくれます:

h configs/environment/local.php
h configs/logging/log4php.xml

ignoreおよびunignore次の行のエイリアスを使用して、これをさらに一歩進めることができます。

    ignore = update-index --assume-unchanged
    unignore = update-index --no-assume-unchanged
于 2014-06-24T21:00:27.807 に答える
13

私自身はSVN チェンジリストを使用したことはありませんが、正しく理解していれば、ファイルをチェンジリストにグループ化し、後でそれらのチェンジリストを個別にコミットすることができます。(右?)

Git でそのような機能が本当に必要だとは思いません。git add各ファイルまたはその一部( )を個別にステージング ( git add -p) し、それらをコミットすることができます。変更リストごとにブランチを作成し、後でそれらのブランチをマージ/リベースできます。または、いくつかのコミットを作成し、後でインタラクティブなリベース ( ) で並べ替えることができますgit rebase -i

の代わりにsvn diff --changelist something、単に を使用しますgit show changelistbranch

これらのローカル/一時ブランチをプッシュする必要はありません。野生に放す準備ができていると考えるまで、誰もそれらを見る必要はありません。

「チェンジリスト ブランチ」:git branch changelist/name_of_your_changelistに名前を付けることもできます。これにより、すべてのチェンジリストがプレフィックスでグループ化されます。

何か不足していますか?

于 2012-05-15T18:51:23.730 に答える