この記事は 一分で読める小ネタのカレンダー | Advent Calendar 2023 - Qiita の8日目
git の設定
- git にはたくさんの設定がある
- たいていはデフォルトの設定でうまく動く
- 自分の好みや使い方に合わせて設定を変更することができる
- 自分用の設定を git で管理して、github にあげておけば便利
- config_git リポジトリを作りましょう
本文はここまで。以下は時間外w
おすすめ
- リポジトリの名前を git にすると紛らわしい(リポジトリのURLが github.com/xxx/git.git になる)
-
$XDG_CONFIG_HOME
に配置すると、$HOME/.config/git
になるので、リポジトリ名をconfig_git
にすることを薦めている - 全部コピペで突っ込むのではなく、覚えたいものとか、役に立ちそうだと思ったら使ってみる、一度に全部じゃなく少しずつやっていく、のを忘れないこと
alias
- vs shell alias
- 好みがわかれるところだけど
- git コマンド自体を alias
g
-
commit
を git aliasc
またはco
- するとコマンドは
g co
- とするくらいなら、shell alias で
gco="git commit"
のほうがスペース1文字分タイプ数が少ない - (ちなみに gc は count graph components というコマンドが既にあるので上書きしないことを薦める。
man gc
を参照。ガベージコレクションのことではない) - というわけでサブコマンドに関してショートカットするつもりで git alias するなら、シェルのコマンド alias にフルコマンドで設定しておいたほうが楽だと思っている。参考 dotfiles/alias at master · officel/dotfiles
お薦めする git alias はこれだけ。特に plog は shell alias に持っていくと長いのでこっちに置いている。pr は引数をくっつける必要があって、bash alias では実現できない(? function にする必要がある)のでこっちにいる。
config
[alias]
cancel = reset --soft HEAD^
save = stash save
load = stash pop
alias = !git config --get-regexp 'alias\\.' | sed 's/alias\\.\\([^ ]*\\) \\(.*\\)/\\1\\\t => \\2/' | sort
plog = log --pretty=format:'%C(yellow)%h %C(green)%cd %C(reset)%s %C(red)%d %C(cyan)[%an]' --date=format-local:'%t%Y/%m/%d %H:%M' --all --graph
pr = "!git push origin HEAD:refs/heads/$1 #"
ちなみに shell alias 側のお薦めはこう。
alias
# git
alias g='git'
alias ga='git add'
alias gau='git add -u'
alias gb='git branch'
alias gcan='git commit --amend --no-edit'
alias gcv='git commit -v'
alias gdc='git diff --cached'
alias gdi='git diff'
alias gg='git grep -i -P'
alias gp='git plog -10'
alias gpr='git pr'
alias gr='git fetch --prune --all && git checkout origin/HEAD && git plog -10 && git status'
alias gs='git switch -d origin/HEAD'
alias gst='git status --short --branch'
alias cr='cd "$(git rev-parse --show-toplevel)"'
上2つをセットしておくと、普段の作業はこんな感じ。毎日何度も打つのでこのくらい省力化できると楽
cd repo
gr # fetch してデフォルトブランチに移動(デタッチ)して最新のログとディレクトリの状態を表示
vi xxx # 何かする
cd yyy # 移動して何かする。以下繰り返し
vi yyy
...
cr # めんどくさいのでリポジトリのトップに移動(Change Repoと覚える)
gst # 作業結果のチェック。あと作業に時間が空いたらいつでも gr してる
gau # git add (-u)
gcv # git commit (-v)
gpr fix/xxx # git push (origin HEAD:refs/heads/fix/xxx)
ignore
-
.DS_Store
と*.swp
をリポジトリに混ぜてしまうミスは何もかもが理解できていない証拠なのでまずこれを突っ込め - それ以外はだいたいリポジトリ毎の運用の範疇なので要相談(リポジトリ側にあれば要不要はそれに従う)
-
*.nogit
,*.nogit.md
みたいなのを入れておくとローカルに置いておいてもコミットされないメモに使える(ファイルの管理には注意) - ちなみにこのメモは、history やコマンドの出力をメモしておく
command >> hist.nogit
によく使える - 本来必要ないけど、古き良き一時的なファイルのバックアップとして
cp -p org org.`date -I`.nogit
としても便利(いやほんと git の話してるんだからこれは要らないよね)
その他のファイル
-
git_commit_conventions.txt
を用意して、
git_commit_conventions.txt
[commit]
template = /path/yours/git_commit_conventions.txt
のようにすると、コミット時テンプレートとして使える。Conventional Commits に慣れるまで付けておくとそれなりに重宝する。
- サブモジュールとかアトリビュートってグローバルで管理しない、よね?
改善依頼
- ご自慢の dotfiles か config_git なリポジトリがあればぜひ参照させて欲しい
- ターミナルの背景黒、透過なしにしているので、個人的には困ってないんだけど、配色周りで何か工夫を知っている人がいればぜひ共有して欲しい
- プロンプトにブランチ名を出すの、個人的には邪魔だと思っているのでやってないんだけど、紹介したい人がいたら