Подтвердить что ты не робот

Каковы сантехнические и фарфоровые команды?

В Git существует такое различие между командами сантехники и фарфора, но как я могу сказать, что команда является сантехнической или фарфоровой? Какая граница, которая заставляет меня распознавать одно из другого?

Я не спрашиваю, что такое фарфор или сантехника, но как, с учетом команды, могу ли я сказать, является ли это сантехникой или или фарфоровой.

4b9b3361

Ответ 1

Как blue112 отметил, разделительная линия нечеткая. Самая первая страница документации, однако, имеет явный список (и как примечания RM ниже, одним из основных критериев является, по крайней мере, должна быть стабильность интерфейса, для которой некоторые номинально-фарфоровые команды имеют --porcelain 1 чтобы заставить более стабильную и/или более машиночитаемую вывод). Вы можете использовать их список или решить, что некоторые команды слишком высокого уровня для низкого уровня или слишком низкого уровня для высокого уровня. Например, вы можете не согласиться с тем, что git apply является командой сантехника, но страница Git говорит, что это так. Или вы можете рассматривать такие вещи, как git fast-import, чтобы быть тем, что вы использовали бы только внутри script.

Список ниже просто извлекается из документации, с описаниями и дополнительными классификациями, лишенными оставить только "фарфор" против "сантехники". (Подклассификации остаются видимыми как инверсии в алфавитном порядке сортировки. Я не создавал ссылки для каждой записи, так как это было бы значительно сложнее с уценкой StackOverflow - для этого требовалось простое <pre> ... </pre> ; обертка.)

фарфор

git-add                 git-rebase              git-cherry
git-am                  git-reset               git-count-objects
git-archive             git-revert              git-difftool
git-bisect              git-rm                  git-fsck
git-branch              git-shortlog            git-get-tar-commit-id
git-bundle              git-show                git-help
git-checkout            git-stash               git-instaweb
git-cherry-pick         git-status              git-merge-tree
git-citool              git-submodule           git-rerere
git-clean               git-tag                 git-rev-parse
git-clone               git-worktree            git-show-branch
git-commit              gitk                    git-verify-commit
git-describe            git-config              git-verify-tag
git-diff                git-fast-export         git-whatchanged
git-fetch               git-fast-import         gitweb
git-format-patch        git-filter-branch       git-archimport
git-gc                  git-mergetool           git-cvsexportcommit
git-grep                git-pack-refs           git-cvsimport
git-gui                 git-prune               git-cvsserver
git-init                git-reflog              git-imap-send
git-log                 git-relink              git-p4
git-merge               git-remote              git-quiltimport
git-mv                  git-repack              git-request-pull
git-notes               git-replace             git-send-email
git-pull                git-annotate            git-svn
git-push                git-blame

водопроводный

git-apply               git-for-each-ref        git-receive-pack
git-checkout-index      git-ls-files            git-shell
git-commit-tree         git-ls-remote           git-upload-archive
git-hash-object         git-ls-tree             git-upload-pack
git-index-pack          git-merge-base          git-check-attr
git-merge-file          git-name-rev            git-check-ignore
git-merge-index         git-pack-redundant      git-check-mailmap
git-mktag               git-rev-list            git-check-ref-format
git-mktree              git-show-index          git-column
git-pack-objects        git-show-ref            git-credential
git-prune-packed        git-unpack-file         git-credential-cache
git-read-tree           git-var                 git-credential-store
git-symbolic-ref        git-verify-pack         git-fmt-merge-msg
git-unpack-objects      git-daemon              git-interpret-trailers
git-update-index        git-fetch-pack          git-mailinfo
git-update-ref          git-http-backend        git-mailsplit
git-write-tree          git-send-pack           git-merge-one-file
git-cat-file            git-update-server-info  git-patch-id
git-diff-files          git-http-fetch          git-sh-i18n
git-diff-index          git-http-push           git-sh-setup
git-diff-tree           git-parse-remote        git-stripspace

1 Казалось бы более логичным назвать этот --plumbing, но как VonC отмечает в этом ответе на соответствующий вопрос, один вместо этого можно рассматривать это как запрос: "Я внедряю фарфор, поэтому, пожалуйста, дайте мне результат в сантехнике". Недостатком этого аргумента является то, что вы можете внедрять комплексную сантехнику и хотите использовать простую сантехнику для этого: теперь нет фарфора в поле зрения, и все же ваша сложная сантехника проходит --porcelain до некоторой простой сантехники.

Ответ 2

Я думаю, что нет прямой линии между командами.

Команды, которые вы используете изо дня в день, - это фарфор (подумайте о status, diff, commit...), менее используемые команды, которые дают менее сформированные выходы, - это сантехника (подумайте о diff-index, hash-object или send-pack).

У вас может быть полный список команд git с помощью git help -a. Здесь довольно легко сказать, какая команда больше относится к фарфору или сантехнику.

В руководстве по git send-pack вы можете увидеть следующую строку

Обычно вы хотели бы использовать git push, который является оболочкой более высокого уровня этой команды.

Это то, что говорит вам, что это больше команда сантехники.

Ответ 3

Одна из идей - посетить страницу Git и посмотреть, есть ли команда, которую вы хотите использовать, в списке команд высокого уровня (porcelain) или команды низкого уровня (plumbing)