Потому что единственная настоящая команда - git
.Остальные либо символически связаны с самим git
, либо (что более вероятно) все они жестко связаны.
Когда два файла жестко связаны друг с другом, они ссылаются на одну копию на диске, хотя и с разными именами.Имена файлов - это просто указатели на определенный inode на диске. Именно так Linux / Unix отслеживает, где и где хранится.
Вы можете проверить это, выполнив:
$ ls -il /usr/bin/git*
Если онивсе они имеют одинаковые номера в первом столбце, а затем все ссылаются на один и тот же индекс.Число сразу после разрешений - это количество жестких ссылок на этот единственный индекс.Фактическое дисковое пространство для этого исполняемого файла (или любого файла с жесткими ссылками) не освобождается до тех пор, пока это число не достигнет нуля (все ссылки на него исчезнут).
(Кстати ... если они символически связаны с вами, ''мы увидим что-то вроде git-annotate -> git
, что означает, что имя git-annotate
ссылается на имя git
, которое затем преобразуется в индекс, который содержит (указатель на) данные исполняемого файла)
Git себяэто одна программа, которая знает, как сделать много вещей в зависимости от того, как она называется.Вы можете позвонить либо git annotate
, либо git-annotate
, и они оба будут интерпретироваться одним двоичным файлом git
для выполнения операции аннотирования.
Причина, по которой это сделано, просто для вашего удобства, естьничего, что само по себе git
не нужно, так как вы всегда можете использовать форму git<space>command
его вызова.