0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

一分で読める小ネタAdvent Calendar 2023

Day 8

git の設定を管理しよう

Last updated at Posted at 2023-12-07

この記事は 一分で読める小ネタのカレンダー | 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 alias c または 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 なリポジトリがあればぜひ参照させて欲しい
  • ターミナルの背景黒、透過なしにしているので、個人的には困ってないんだけど、配色周りで何か工夫を知っている人がいればぜひ共有して欲しい
  • プロンプトにブランチ名を出すの、個人的には邪魔だと思っているのでやってないんだけど、紹介したい人がいたら
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?