今まで知らなかったのですが、git-subcommand
といった名前の実行ファイルをパスの通ったディレクトリに置いておくと、
$ git subcommand
といったように、ハイフンなしで実行できます!(便利そう)
オレオレサブコマンドでもこの命名規則で登録しておけば、通常の git コマンドと同じような感覚で利用できとても捗ります。
よってこの記事では、他のリポジトリでもよく見かけるようなサブコマンドや、今回自作したサブコマンドなどを紹介していきます。
自作した git サブコマンドは筆者の dotfiles リポジトリに置いてあります。
今回以下に紹介するサブコマンドは bash で書いていますが、Ruby でも Python でも、何なら C や Go で書いても OK です。
git undo
#!/bin/bash
git reset "${1:---soft}" HEAD^
最新のコミットを取り消します。単に git undo
とすれば、ステージング後に戻し、git undo --hard
とすればステージングする前の状態かつファイル編集すらもなかったことにします。ここらへんは git reset
の使い方を調べてください。git undo
はそのエイリアスのようなものです。
- git reset についてもまとめてみる
- git-resetは結局何を戻すのか
- git reset がわからない
- [git reset (--hard/--soft)]ワーキングツリー、インデックス、HEADを使いこなす方法
git get
#!/bin/bash
# Check arguments
if [[ -z $1 ]]; then
echo "too few argument" 1>&2
exit 1
elif [[ ! $1 =~ ^(((https?|git)://)?github.com/)?[A-Za-z0-9_-]+/[A-Za-z0-9_-]+(\.git)?$ ]]; then
echo "$1: invalid github.com URL" 1>&2
exit 1
fi
# Format username/reponame
uri="$(echo "$1" | perl -pe "s/^((https?|git):\/\/)?(github\.com\/)?//;s/\.git$//")"
username="${uri%/*}"
reponame="${uri#*/}"
# Destination
dest="${2:-$HOME/src/github.com/$username}"
if [ -d "$dest" ]; then
dest="$dest/$reponame"
fi
# Make dir
mkdir -p "$dest" 2>/dev/null
if [ $? -ne 0 ]; then
echo "$dest: cannot create directory" 1>&2
exit 1
fi
# Run
git clone "https://github.com/${uri}.git" "$dest"
git clone
を簡単にするやつです。わかりやすく名前も git get
にしました。git clone
は https:// から始まる URL を渡しますがタイピングが面倒なので、ユーザ名とリポジトリ名だけで OK にしています。またクローン先もよしなにやってくれるようにしました。ghq
に影響されているため、デフォルトでのクローン先は Go 言語のお作法に習ったそれです。
git extras
たくさんあるので、これらをまとめたリポジトリは無いのかと調べたら案の定ありました。
Comments