rcmdnk's blog

Alias

Gitのエイリアスが増えてきたので それを簡単にチェックするためのエイリアスを作ってみました。

Gitのエイリアスを確認するエイリアス

~/.gitconfigに以下の様なものを追加します。

[alias]
  al = "!f() {\
    if [ \"$#\" -eq 0 ];then \
      git config --name-only --get-regexp ^alias\\.|cut -d"." -f2|column;\
      return;\
    fi;\
    ret=0;\
    for a in \"$@\";do \
      git config --get-regexp ^alias\\.\"$a\"$;\
      rettmp=$?;\
      if [ $rettmp != 0 ];then \
        ret=$rettmp;\
        printf \"\\e[31malias.$a is not defined as alias\\n\\e[m\";\
      fi;\
    done;\
    return $ret;\
  };f"

エイリアス名はaliasとかも使いたいのですが、 hubコマンドを使ってgitをラップしていて、 hubコマンドがaliasというサブコマンドを持っていてそれに取られてしまうので aliasというエイリアスは使えない状態です。

なのでエイリアス名はalに。

引数がない場合には全てのエイリアス一覧を表示します。

$ git al
ad              ce              log-graph       sh              dns             dw              d10             pull-dry-run    update
ba              ci              log-tag         st              dm              d1              d               pull-dry-run-s  up
br              cl              ls              su              dw              d2              sm              tag-renew       deleted
current-branch  co              mh              top             dc              d3              smfe            tag-new         restore
cb              git-dir         rbm             root            ds              d4              smad            cancel          al
checkout-empty  log-all         sb              p               dd              d5              smrm            check

こんな感じ。

git config --name-only --get-regexp ^alias\.

でconfigの中のエイリアス一覧を取ってきて--name-onlyで名前だけ表示にできます(エイリアスの内容を非表示に)。 一覧はalias.adみたいな感じなのでalias.の部分を削除。

順番は~/.gitconfigに書かれた順で表示されるのでアルファベット順にソート。 もし書かれた順に表示したい場合は上のsort|の部分を削除してください。

最後にcolumnで整形。

引数がある場合にはその引数に対応するエイリアスの内容を表示します。

$ git al top
alias.top rev-parse --show-toplevel

サブコマンド一覧

ついでにサブコマンドについても。

サブコマンド一覧はgit help -aで見ることが出来ます。

$ git help -a
usage: git [--version] [--help] [-C <path>] [-c name=value]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

available git commands in '/usr/local/Cellar/git/2.14.2/libexec/git-core'

  add                       credential-store          index-pack                patch-id                  shortlog
  add--interactive          cvsexportcommit           init                      prune                     show
  am                        cvsimport                 init-db                   prune-packed              show-branch
  annotate                  cvsserver                 instaweb                  pull                      show-index
  apply                     daemon                    interpret-trailers        push                      show-ref
  archimport                describe                  log                       quiltimport               stage
  archive                   diff                      ls-files                  read-tree                 stash
  bisect                    diff-files                ls-remote                 rebase                    status
  bisect--helper            diff-index                ls-tree                   rebase--helper            stripspace
  blame                     diff-tree                 mailinfo                  receive-pack              submodule
  branch                    difftool                  mailsplit                 reflog                    submodule--helper
  bundle                    difftool--helper          merge                     remote                    svn
  cat-file                  fast-export               merge-base                remote-ext                symbolic-ref
  check-attr                fast-import               merge-file                remote-fd                 tag
  check-ignore              fetch                     merge-index               remote-ftp                unpack-file
  check-mailmap             fetch-pack                merge-octopus             remote-ftps               unpack-objects
  check-ref-format          filter-branch             merge-one-file            remote-http               update-index
  checkout                  fmt-merge-msg             merge-ours                remote-https              update-ref
  checkout-index            for-each-ref              merge-recursive           remote-testsvn            update-server-info
  cherry                    format-patch              merge-resolve             repack                    upload-archive
  cherry-pick               fsck                      merge-subtree             replace                   upload-pack
  citool                    fsck-objects              merge-tree                request-pull              var
  clean                     gc                        mergetool                 rerere                    verify-commit
  clone                     get-tar-commit-id         mktag                     reset                     verify-pack
  column                    grep                      mktree                    rev-list                  verify-tag
  commit                    gui                       mv                        rev-parse                 web--browse
  commit-tree               gui--askpass              name-rev                  revert                    whatchanged
  config                    hash-object               notes                     rm                        worktree
  count-objects             help                      p4                        send-email                write-tree
  credential                http-backend              pack-objects              send-pack
  credential-cache          http-fetch                pack-redundant            sh-i18n--envsubst
  credential-cache--daemon  http-push                 pack-refs                 shell

git commands available from elsewhere on your $PATH

  clang-format            credential-netrc        credential-osxkeychain  generate-changelog      subtree

'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.

hub custom commands

  alias  browse  ci-status  compare  create  fork  issue  pull-request  release  selfupdate  version

上みたいなコマンドだけを取ってきたかったらこれを整形する必要がありますが、 通常はこれで十分だと思います。

ちなみにサブコマンドはgit-addの様にgit- + <subcommand>みたいな名前のファイルが用意されていて それが呼ばれる様になっています。

なので自分でPATHが通った所に適当なgit-mycommandみたいな実行ファイルを置いておけば 上記出力の git commands available from elsewhere on your $PATH の欄に出てきて実際にgit mycommandという形で使う事が出来ます。

これはgitと全く関係ないものでもなんでも良くて シェルスクリプトでもc++とかで書いてコンパイルした実行ファイルでも なんでも可能です。

要はgit mycommandというのがそのままgit-mycommandに置き換わるだけ。

また、サブコマンドに関してヘルプがある場合は

$ git add -h

とかでそのサブコマンドのヘルプを見れます。

さらにマニュアルがある場合には

$ man git-add

とするとそのマニュアルが開けます。

Sponsored Links
Sponsored Links

« Gitで過去に削除したファイルを検索、復元させる方法 GitHubのレポジトリ一覧を取ってくるワンライナー »

}