そもそものきっかけ。リポジトリの clone と同時に submodule も clone する git clone --recursive
というオプションがあると知った。
確かに git clone --recursive
でうまくいったが、 man git-clone
を読んでも --recursive
オプションの記載がない。 recursive
という単語は --recurse-submodules
オプションの説明中に出てくる。
マニュアルに載っていないということは非公開オプション?使って大丈夫なのか?そもそもなんで載ってないの?載ってない --recursive
オプションが広く普及してるのはなぜ?そして二つのオプションの違いは?
同じ疑問を持った人がいた。
エイリアスであることを突き止めた人のコメントと、根拠となるソースコード。
- https://www.reddit.com/r/git/comments/f26qmf/difference_between_recursive_and_recursesubmodules/fhb4zns/
- https://github.com/git/git/blob/99c33bed562b41de6ce9bd3fd561303d39645048/builtin/clone.c#L105
Git 2.27.0 調べ。 --recursive
は -h
には出てくるけど man git-clone
には載っていない。 man より -h
の方が頻繁に見るだろうから、 --recursive
オプションが普及している理由はこれだろう。
# git clone -h --recurse-submodules[=<pathspec>] initialize submodules in the clone --recursive[=<pathspec>] alias of --recurse-submodules
# man git-clone --recurse-submodules[=<pathspec] After the clone is created, initialize and clone submodules within based on the provided pathspec. If no pathspec is provided, all submodules are initialized and cloned. This option can be given multiple times for pathspecs consisting of multiple entries. The resulting clone has submodule.active set to the provided pathspec, or "." (meaning all submodules) if no pathspec is provided. Submodules are initialized and cloned using their default settings. This is equivalent to running git submodule update --init --recursive <pathspec> immediately after the clone is finished. This option is ignored if the cloned repository does not have a worktree/checkout (i.e. if any of --no-checkout/-n, --bare, or --mirror is given)
git submodule
コマンドの方で同じこともできる(というか git submodule
のやり方が先にあり git clone
のオプションが後付けされた)
$ git submodule update --init --recursive
git cloneしたあとに--recursiveを付け忘れたことに気づいた。あとからsubmoduleをcloneしたい。 - 君は心理学者なのか?
余談。 docker run -it --rm ubuntu bash
の中で最新版の Git を使いたかった。
ubuntuのapt-getで最新版のgitをインストールする方法 - spangled shalalala blog
↑のあと man git-clone
すると↓のようなメッセージが出た。
# man git-clone This system has been minimized by removing packages and content that are not required on a system that users do not log into. To restore this content, including manpages, you can run the ’un‐ minimize’ command. You will still need to ensure the ’man‐db’ package is installed.
言われた通りにする。
# unminimize # apt install man-db
これで無事に man git-clone
で読めるようになった。