Wie bekommt man git init die richtige Manpage?

52

Es scheint also, dass das Eingeben man git initeiner Bash-Eingabeaufforderung auf einem Ubuntu 14.04-System dasselbe bewirkt man git-init, nur dass ich nicht ganz sicher bin, wie.

Die manSeite für man(ie man man) scheint dieses Konstrukt nicht zuzulassen, es gitsei denn, sie war sectionTeil des Handbuchs, aber die Manpage scheint aus einem Abschnitt zu stammen 1.

Ist dies eine undokumentierte Verwendung von man? Habe ich die Dokumentation von falsch verstanden man? Geschieht eine andere Magie? Möchte jemand etwas erklären?

mc0e
quelle
Es sieht so aus, als ob git-init nur ein Wrapper ist fürgit init
Jeff Schaller

Antworten:

71

Einige Implementierungen von man, einschließlich der von Ubuntu, ersetzen Leerzeichen in den Suchbegriffen durch Bindestriche und versuchen, eine Handbuchseite unter diesem Namen zu finden. So man git initsieht das Gleiche aus wie man git-init. Ebenso man run partsund man ntfs 3garbeiten (wenn Sie run-partsund ntfs-3gauf Ihrem System).

Dies geschieht jedoch nur mit Wortpaaren, man git annex syncfunktioniert also nicht (obwohl dies der man git-annex syncFall ist, da dies wiederum ein Wortpaar ist).

Wenn Sie nach zwei Manualpages fragen (z. B. man git bashum sowohl die git- als auch die bash- Manpage anzuzeigen), manversuchen Sie tatsächlich zuerst, nach einer git-bashManpage zu suchen . Sie können dies in der Debug-Ausgabe sehen, wenn Sie es mit aktivieren -d.

Diese Man-Funktion heißt "Unterseiten". Sie können den Quellcode lesen, der Unterseiten in man-db implementiert (danke, Stephen Kitt ). Durch Durchsuchen der man(1)Manpage nach "Unterseiten" gelangen Sie auch zur Beschreibung dieses Verhaltens unter der --no-subpagesOption:

--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
quelle
Dies scheint unter CentOS 6.6 nicht zu funktionieren. Ist es nur Ubuntu?
Wildcard
1
@Wildcard welcher Teil scheint nicht zu funktionieren? Es sollte funktionieren, solange CentOS man-db verwendet (es gibt andere manImplementierungen) und Unterseiten nicht deaktiviert wurden (z --no-subpages. B. mit ). Ich benutze Debian, es ist also definitiv nicht nur Ubuntu.
Derobert
2
Wichtig ist, dass dies nur für eine bestimmte Implementierung von gilt man. Es ist keineswegs universell oder besonders verbreitet.
Chepner