Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
64
Help us understand the problem. What is going on with this article?
@b4b4r07

便利な「git-サブコマンド」を作成する

More than 5 years have passed since last update.

今まで知らなかったのですが、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 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

たくさんあるので、これらをまとめたリポジトリは無いのかと調べたら案の定ありました。

64
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
b4b4r07
tellme.tokyo
mercari
フリマアプリ「メルカリ」を、グローバルで開発しています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
64
Help us understand the problem. What is going on with this article?