Используйте команду, отличную от version
. Например, попробуйте использовать псевдонимы от l
до log
. (Или, как отмечает Von C, обновление - на самом деле работает в современной Git. Обработка псевдонимов, кажется, была переписана между 2.17.3 и 2.18.0.)
Почему l = log
работает, и все же v = version
нет?
Это немного сложно!
Большинство Git команд - и в один момент все Git команды были - отдельные программы, которые устанавливаются отдельно в каталог (или папку, если вы предпочитаете термин), полный «Git команд, которые вы можете запустить». Например, git log
на самом деле реализуется командой, записанной git-log
, которая устанавливается в специальный каталог / папку.
Этот каталог / папка , а не , которую вы обычно запускаете команды из , однако.
В далеком прошлом эти Git команды - git-log
, git-commit
, git-add
, git-diff
и т. Д. - были все установил непосредственно, и вы запустили их напрямую, набрав git-<em>something</em>
. Это хорошо работает с автозаполнением bash, так как вы можете набрать git-com<kbd>TAB</kbd>
, чтобы получить команду фиксации, или git-ch<kbd>TAB</kbd>
, чтобы получить команду извлечения. Но со временем число команд Git росло (git-cherry
и git-cherry-pick
), росло и росло; и в конце концов даже набора полной команды git-add
оказалось недостаточно , потому что, к примеру, git-add--interactive
, поэтому завершение TAB практически полностью перестало работать.
Принято решение: Git не собирается прекращать поступать с 57 различными командами - на самом деле, сейчас их более 150 - но вместо этого все эти различные команды реализация будут сгруппированы в такое место, где они не будут все время в твоем лице. Команда single front end , записанная git
, позволит вам ввести команду как аргумент для команды front-end git
: git com
, затем TAB : bash теперь имеет список из разрешенных завершений и выберет только commit
, поскольку это единственное com
, которое вас будет использовать, а не git-commit-tree
или git-commit-graph
фоновые программы, которые регулярно используются только сценариями.
Итак: команда front end git
знает, как найти и запустить все различные реализации back end . По соглашению, большинство из них находятся в каталоге git-core
: запустите
git --exec-path
, и внешний интерфейс напечатает название места, где фактически живут все фоновые программы. (Вы можете заглянуть туда и даже запустить их оттуда напрямую, если хотите, хотя в наши дни команда git
внешнего интерфейса теперь устанавливает информацию, которая может потребоваться командам внутреннего интерфейса.)
Но что о git version
? Итак, теперь, когда вы знаете, что команды Git фактически находятся в папке git-core
, где бы это ни находилось в вашей системе, я предлагаю вам посмотреть там. Где находится программа git-version
? Там вы найдете git-checkout
, git-log
, git-commit
, git-diff
и многие другие, но вы не найдете git-version
. Его нет.
Команда version
встроена непосредственно в интерфейс . псевдонимы работают только при вызове команды back end . Так что, в любом случае, нет или не было псевдонима version
. (В какой-то момент, очевидно, после 2.9 и до 2.24, код обработки псевдонимов был улучшен для проверки встроенных функций интерфейса).
Есть еще одна важная вещь, которую нужно знать
Внешний интерфейс git
команда знает о некоторых общих внутренних командах, но он не не имеет полного списка внутренних команд. Вместо этого, когда вы вводите git asdf
или git rumplestiltskin
или git helloworld
- ни одна из которых не является действительными Git командами - он просто настраивает все как обычно, а затем пытается запустить git-asdf
или git-rumplestiltskin
или git-helloworld
, при этом указав системе искать в каталоге git-core
. Система не не указывает искать в других каталогах.
Это означает, что вы можете написать свои Git команды. Если вам нужна git asdf
, вы можете написать собственную программу git-asdf
и поместить ее в любое место, чтобы запуск git-asdf
завершился успешно. Теперь вы можете запустить его, используя git asdf
.
Почему, вы можете спросить, захотите ли вы сделать это? Если вы устанавливаете git-asdf
в свою собственную папку bin или scripts, вы можете просто запустить git-asdf
. И действительно, вы можете сделать это. Но когда у вас есть front end , вы запускаете со специальной предоставленной Git информацией о настройке. Это дает вам возможность написать свою программу в виде sh (или bash) сценариев и и получить прямой доступ к различным Git помощникам. Основной помощник называется git-sh-setup
, и вы вызываете его, используя "источник", с помощью .
(POSIX) или source
(bash):
#! /bin/sh
. git-sh-setup
Это добавляет функции оболочки die
и say
и git_pager
и require_clean_work_tree
и более. Если вы установите переменную оболочки OPTIONS_SPEC
перед источником git-sh-setup
, она проанализирует аргументы за вас. Посмотрите на сценарий - он находится прямо в каталоге git-core
- чтобы увидеть, как его использовать.
(Обратите внимание, что, как и все вещи Git, он со временем вырос. У него теперь больше функций чем, например, во времена Git 1.7. Если вы хотите что-то, что перенесено в более ранние версии Git, клонируйте репозиторий Git для Git, выберите уровень совместимости и git checkout
старый, чтобы увидеть, на что можно положиться.)