Как понять структуру команды git? - PullRequest
0 голосов
/ 29 декабря 2018

Как понять структуру команды git?

   git remote add origin repo-url

В приведенном выше коде какая команда является, а какая - параметром?

Ответы [ 3 ]

0 голосов
/ 29 декабря 2018

Если у вас возникли проблемы с пониманием интерфейса командной строки git, вы всегда можете использовать графический интерфейс git, который тоже отлично работает.

0 голосов
/ 29 декабря 2018

В разных системах доступны разные интерпретаторы командной строки, поэтому для некоторых деталей важна ОС и / или выбранная вами оболочка.Вы упоминаете Linux (через тег ), поэтому мы можем предположить, что вы используете bash, dash, fish, zsh или, возможно, даже tcsh или что-то подобное.Эти оболочки немного различаются, но у них много общего:

  • Они рассматривают первое слово, разделенное пробелом, как команду.Все остальные слова являются аргументами.

  • Они делают то, что оболочки называют глобальное расширение , так что вместо программ нужно интерпретировать *.pyнапример, программа просто получает все файлы .py в качестве отдельных аргументов.

  • Они выполняют расширение переменной , например замену $HOME на ваш домашний каталог.

(Это не подходящее место для обсуждения всех этих деталей - найдите документацию для вашей конкретной оболочки, прочитайте ее и / или прочитайте некоторые книги по среде программирования Unix или Linux.StackOverflow и другие сайты StackExchange, тем не менее, имеют множество конкретных ответов о конкретных конструкциях программирования оболочки.)

В любом случае, с помощью команды:

git remote add origin repo-url

оболочка ответственность заключается в разбиении пяти слов на вектор аргументов: git, remote, add, origin и repo-url.Нулевой аргумент 1 - это команда для запуска, поэтому оболочка затем находит эту команду (используя $PATH) и запускает ее, передавая все аргументы - включая само имя команды - команде.

Таким образом, на этом этапе команда равна git, а все остальное является аргументом этой команды.Однако сама команда git действует как миниатюрная неинтерактивная оболочка: она интерпретирует свои аргументы, такие как remote, чтобы выяснить, какая из них является командой.Таким образом, для Git remote - это команда с аргументами add, origin и repo-url.Git добавляет к команде префикс git-, затем находит команду git-remote, которая находится в каталоге, который будет напечатан git --exec-path, и запускает , с аргументами add, origin иurl (и нулевой аргумент git-remote).

Таким образом, передав команду git в команду git-remote, аргументы теперь просто add, origin и url (с именем команды git-remote доступным для git-remote в качестве нулевого аргумента).

Обратите внимание, что сама команда git принимает (и обрабатывает и, следовательно, удаляет) некоторые параметры команды.Например, выполнение:

git --work-tree=/tmp hello world

заставляет Git сохранить настройку рабочего дерева /tmp, а затем попытаться запустить команду git-hello с аргументом world.Вы можете написать свои собственные команды Git, написав, например, программу git-hello: git hello запустит вашу программу git-hello.В любом случае, аргумент --work-tree исчез из списка аргументов на этом этапе.(Git сохранил его в переменной окружения, $GIT_WORK_TREE. Переменные окружения передаются по системным вызовам exec; exec - это как оболочка запускает git и как Git выполняет свои подкоманды.)


1 Этот нулевой аргумент часто называют argv[0] после соглашения об именах, используемого в программировании на языке Си.

0 голосов
/ 29 декабря 2018

git cli book содержит подробную информацию об интерфейсе командной строки git.

в вашем коде git remote - это команда, а после нее - аргументы.

git-remote - Управление набором отслеживаемых репозиториев

Управление набором репозиториев («удаленных»), чьи ветви вы отслеживаете.

вы можетенайти подкоманды для любой команды git по

git help <git_command>
...