
Git リポジトリにコミットしたばかりのファイルがいくつかあります:
C:\core\guidewire\Release\5.3_MT1\ClaimCenter>git diff --name-only head^^ ClaimCenter/modules/configuration/config/web/pcf/TabBar.pcf ClaimCenter/modules/configuration/config/web/pcf/team/user/TeamUserClaims.pcf ClaimCenter/modules/configuration/gsrc/citizens/cc/pcf_gs/team/TeamTabLastUser.gs
ここでパスをキャプチャして、それを使って何か他のことをしたいのですが、コマンドは反復処理するgit diff
行を生成しません(?) 。FOR /F
C:\core\guidewire\Release\5.3_MT1\ClaimCenter>for /f %p in ('git diff --name-only head^^') do @( echo %p )
C:\core\guidewire\Release\5.3_MT1\ClaimCenter>
何が起きてる?最初は構文の間違いだと思っていましたが、他のターゲットとの比較は for ループ内で機能します。たとえば、「master^^」は、エスケープ文字だけが問題を引き起こしているわけではないことを証明しています。
C:\core\guidewire\Release\5.3_MT1\ClaimCenter>for /f %p in ('git diff --name-only master^^') do @( echo %p ) ClaimCenter/modules/configuration/config/rules/Reopened/ClaimReopened_dir/CRO05000ApplyCustomReopenRule_dir/CRO05010AssignToOriginalAdjuster.gr ClaimCenter/modules/configuration/config/rules/Reopened/ClaimReopened_dir/CRO05000ApplyCustomReopenRule_dir/CRO05030DefaultAssignment.gr ClaimCenter/modules/configuration/config/web/pcf/TabBar.pcf ClaimCenter/modules/configuration/config/web/pcf/team/user/TeamUserClaims.pcf ClaimCenter/モジュール/構成/gsrc/citizens/cc/pcf_gs/チーム/TeamTabLastUser.gs
答え1
「head^」をダブルエスケープして「head^^^^」にする:
C:\core\guidewire\Release\5.3_MT1\ClaimCenter>for /f %p in ('git diff --name-only head^^^^') do @(echo %p)
ClaimCenter/modules/configuration/config/web/pcf/TabBar.pcf
ClaimCenter/modules/configuration/config/web/pcf/team/user/TeamUserClaims.pcf
ClaimCenter/modules/configuration/gsrc/citizens/cc/pcf_gs/team/TeamTabLastUser.gs
CMD が引用符で囲まれたコマンドを実行すると、2 回目の展開が行われ、 となり、 と^^
なります。実際、"master^^" と比較したテスト ケースでは、キャレットが残っていないため、何も証明されません。元のコマンド ラインは、HEAD と HEAD を比較しただけであり、もちろんファイルはまったく変更されていません。^