管理git的配置
这篇文章是关于 Advent Calendar 2023 – Qiita 中的一分钟小趣闻日历的第八天。
Git的配置
-
- git にはたくさんの設定がある
-
- たいていはデフォルトの設定でうまく動く
-
- 自分の好みや使い方に合わせて設定を変更することができる
-
- 自分用の設定を git で管理して、github にあげておけば便利
- config_git リポジトリを作りましょう
本文到此结束。以下是加班时间。
推荐
-
- リポジトリの名前を git にすると紛らわしい(リポジトリのURLが github.com/xxx/git.git になる)
$XDG_CONFIG_HOME に配置すると、$HOME/.config/git になるので、リポジトリ名を config_git にすることを薦めている
全部コピペで突っ込むのではなく、覚えたいものとか、役に立ちそうだと思ったら使ってみる、一度に全部じゃなく少しずつやっていく、のを忘れないこと
化名
-
- 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中(?需要将其设置为函数),所以我将其放在这里。
[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,下面是我的推荐。
# 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)"'
当把两个项目设置在一起的时候,平常的工作就是这样的。由于每天要打很多次字,能够省力这么多的话就很轻松了。
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)
忽略
.DS_Store と *.swp をリポジトリに混ぜてしまうミスは何もかもが理解できていない証拠なのでまずこれを突っ込め
それ以外はだいたいリポジトリ毎の運用の範疇なので要相談(リポジトリ側にあれば要不要はそれに従う)
*.nogit , *.nogit.md みたいなのを入れておくとローカルに置いておいてもコミットされないメモに使える(ファイルの管理には注意)
ちなみにこのメモは、history やコマンドの出力をメモしておく command >> hist.nogit によく使える
本来必要ないけど、古き良き一時的なファイルのバックアップとして cp -p org org.`date -I`.nogit としても便利(いやほんと git の話してるんだからこれは要らないよね)
其它文件
git_commit_conventions.txt を用意して、
[commit]
template = /path/yours/git_commit_conventions.txt
用这种方式,可以将其用作提交时的模板。在熟悉了常规提交后,将其保留下来会相当方便。
- サブモジュールとかアトリビュートってグローバルで管理しない、よね?
请做出改善。
-
- ご自慢の dotfiles か config_git なリポジトリがあればぜひ参照させて欲しい
-
- ターミナルの背景黒、透過なしにしているので、個人的には困ってないんだけど、配色周りで何か工夫を知っている人がいればぜひ共有して欲しい
- プロンプトにブランチ名を出すの、個人的には邪魔だと思っているのでやってないんだけど、紹介したい人がいたら