Bagaimana `man git init` mendapatkan halaman manual yang benar?

52

Jadi sepertinya mengetikkan man git initbash prompt pada sistem Ubuntu 14.04 melakukan hal yang sama man git-init, hanya saja saya tidak yakin bagaimana caranya.

The manhalaman untuk man(yaitu man man) tampaknya tidak memungkinkan untuk membangun ini, kecuali gitadalah sectiondari manual, tapi halaman manual tampaknya datang dari bagian 1.

Apakah ini merupakan penggunaan tanpa dokumen yang didukung oleh man? Sudahkah saya salah mengerti dokumentasi man? Apakah ada keajaiban lain yang terjadi? Adakah yang mau menjelaskan?

mc0e
sumber
Tampak seolah-olah git-init mungkin hanya menjadi pembungkus untukgit init
Jeff Schaller

Jawaban:

71

Beberapa implementasi man, termasuk yang digunakan oleh Ubuntu, mengganti spasi dalam istilah pencariannya dengan tanda hubung dan berusaha menemukan halaman manual dengan nama itu. Jadi man git initmencari hal yang sama man git-init. Demikian pula, man run partsdan man ntfs 3gbekerja (jika Anda memiliki run-partsdan ntfs-3gdi sistem Anda).

Ini hanya melakukan ini dengan pasangan kata, jadi man git annex synctidak bekerja (meskipun man git-annex synctidak, karena itu lagi pasangan kata).

Bahkan, ketika Anda meminta dua halaman manual (mis., man git bashUntuk melihat halaman manual git dan bash), mansebenarnya pertama-tama mencoba mencari git-bashhalaman manual. Anda dapat melihat ini di output debug jika Anda mengaktifkannya dengan -d.

Fitur man ini disebut "subhalaman" Anda dapat membaca kode sumber yang menerapkan subhalaman di man-db (terima kasih, Stephen Kitt ). Mencari halaman man(1)manual untuk "subhalaman" juga akan mengarahkan Anda ke deskripsi perilaku ini di bawah --no-subpagesopsi:

--no-subpages
      By default, man will try to interpret pairs of manual page
      names given on the command line as equivalent to a single
      manual page name containing a hyphen or an underscore.  This
      supports the common pattern of programs that implement a
      number of subcommands, allowing them to provide manual pages
      for each that can be accessed using similar syntax as would be
      used to invoke the subcommands themselves.  For example:

        $ man -aw git diff
        /usr/share/man/man1/git-diff.1.gz

      To disable this behaviour, use the --no-subpages option.

        $ man -aw --no-subpages git diff
        /usr/share/man/man1/git.1.gz
        /usr/share/man/man3/Git.3pm.gz
        /usr/share/man/man1/diff.1.gz
derobert
sumber
Ini sepertinya tidak berfungsi pada CentOS 6.6. Apakah hanya Ubuntu?
Wildcard
1
@ Kartu Memori bagian mana yang tampaknya tidak berfungsi? Ini harus berfungsi selama CentOS menggunakan man-db (ada manimplementasi lain ), dan subhalaman belum dinonaktifkan (misalnya, dengan --no-subpages). Saya menggunakan Debian, jadi itu pasti bukan hanya Ubuntu.
derobert
2
Yang penting adalah ini unik untuk implementasi spesifikman . Ini tidak berarti universal atau umum.
chepner