このgitコマンドでファイル名の前にある二重ダッシュの意味は何ですか?
git checkout --ours -- path/to/file.txt
git checkout --theirs -- path/to/file.txt
それらは必須ですか?同等ですか
git checkout --ours path/to/file.txt
git checkout --theirs path/to/file.txt
このgitコマンドでファイル名の前にある二重ダッシュの意味は何ですか?
git checkout --ours -- path/to/file.txt
git checkout --theirs -- path/to/file.txt
それらは必須ですか?同等ですか
git checkout --ours path/to/file.txt
git checkout --theirs path/to/file.txt
回答:
path/to/file.txt
私のGitリポジトリーに名前の付いたファイルがあり、その変更を元に戻したいとします。
git checkout path/to/file.txt
ここで、ファイルの名前がmaster
...
git checkout master
おっと!代わりにブランチが変更されました。は--
、チェックアウトするツリーとチェックアウトするファイルを分離します。
git checkout -- master
また、いくつかのfreakoが-f
リポジトリに名前が付けられたファイルを追加した場合にも役立ちます。
git checkout -f # wrong
git checkout -- -f # right
--
あり、他の引数からオプションを分離するために使用できるため、cp
and mv
(Bashの一部ではない)などのコマンドで表示されます。
checkout
コマンドドキュメントに適切に記述されていない理由はありますか?
checkout
コマンドへの可能なパラメーターのようにリストされていますが、ドキュメントはそれが何をするか、なぜそれが使用されるのかを説明していません...
--
。Linuxのバックグラウンドを持っていない人として、それが何をするのかは明らかではありません。私には、それはgitに固有の構文であるように見え、その機能的な目的の説明はありませんでした。他のオプションのように短い説明を付けるか、少なくともLinuxのmanページへのリンクを付けたほうがよいと思います。
Git 2.5(2015年第2四半期)以降--
、引数にワイルドカード(*
)が
git <cmd> <revs> <pathspec>
誤って入力されたパスをキャッチするための " "コマンドライン規則を支援するヒューリスティックは、コマンドラインの後の部分のすべての非revパラメータが作業ツリー内のファイルの名前であることを確認することですが、これgit grep $str -- \*.c
は常に" " " --
"で曖昧さをなくしました。なぜなら、誰も正気ではなく、名前がアスタリスク-ドット-シーであるファイルを作成するからです。
Git 2.5は、ヒューリスティックを緩めて、ワイルドカード文字列を使用して、ユーザーがパススペックを提供することを意図していることを宣言します。
git checkout 'a*'
# same as
git checkout -- 'a*'
Duy Nguyen()によるcommit 28fcc0b(2015年5月2日)を参照してください。(による合併Junio C浜野- -で949d167コミット、2015年5月19日)をnguyenlocduy
gitster
pathspec
:の必要性を避けます--
ワイルドカードが使用されている場合 "
--
コマンドラインに" "がなく、コマンドがrevとパスの両方を取得できる場合、引数が拡張SHA-1とパスの両方と見なせる場合、 "--
"が必要であるか、gitが続行を拒否します。
現在、次のように実装されています。
- (1)引数がrevの場合、ワークツリーに存在してはならない
- (2)それ以外の場合、ワークツリーに存在する必要があります
- (3)それ以外の場合、「
--
」が必要です。これらのルールはリテラルパスに対して機能しますが、非リテラルパス仕様が関係する場合、ほとんどの場合、ユーザーは "
--
" を追加する必要があります。失敗するため(2)と(1)が実際に満たされることはほとんどありません(*.c
例: "1) "*.c
" という名前の参照が存在する場合に満たされます。このパッチは、
*
「ワークツリーに存在する」有効な()ワイルドカードパス指定を考慮することにより、ルールを少し変更します。
ルールは次のようになります。
- (1)argがrevの場合、ワークツリーに存在するか、有効なワイルドカードパス仕様ではないかのいずれかでなければなりません。
- (2)それ以外の場合は、ワークツリーに存在するか、ワイルドカードパス指定です
- (3)それ以外の場合、「
--
」が必要です。新しいルールで
--
は、ワイルドカードパススペックが含まれている場合、ほとんどの場合" "は必要ありません。
Git 2.26(2020年第1四半期)では、リビジョンとパス指定を区別するための明確化ロジックが調整され、バックスラッシュでエスケープされたglob特殊文字が「ワイルドカードはパス指定」ルールに含まれないようになりました。
Jeff King()によるコミット39e21c6(2020年1月25日)を参照してください。(合併によりJunio C浜野- -で341f8a6コミットし、2020年2月12日)をpeff
gitster
verify_filename()
:「ワイルドカードはパス指定です」ルールでバックスラッシュを処理します報告者:DavidBurström
署名者:ジェフキングコミット28fcc0b71a(
pathspec
:--
ワイルドカードが使用されている場合、 " " の必要性を回避、2015-05-02)許可:git rev-parse '*.c'
ダブルダッシュなし。
ただし、ワイルドカードをチェックするために使用するルールは、実際にはグロブスペシャルを探します。
これは、「a\b
」のように実際にワイルドカード照合を行わないパターンがパス指定と見なされることを意味するため、過度に自由です。そのようなファイルがディスク上にある場合、それはおそらくあなたが望んでいたことです。
しかし、そうでない場合、結果は混乱します。「there's no such path a\b
」と言うのではなく、何も一致しない(または少なくとも意図したものとは一致しない)可能性のあるパス仕様として静かに受け入れます。
同様に、パス "a\*b
"を検索しても、検索はまったく拡張されません。単一のエントリ "a*b
" しか見つかりません。このコミットは、グロブメタキャラクターが検索を拡張する場合にのみトリガーするようにルールを切り替えます。つまり、これらの両方のケースでエラーが報告されます(
--
もちろん、" " を使用して曖昧さをなくすことができます。もちろん、DWIMヒューリスティックを強化しています)。
28fcc0b71aの元の機能はまったくテストしていません。
したがって、このパッチはこれらのまれなケースをテストするだけでなく、既存の動作の回帰テストも追加します。