1
0

20240325 gitあれこれ、プロンプト、ブランチへのpush禁止、aliasに引数

Last updated at Posted at 2024-03-26

git、github

プロンプト変更

いままで公式(なのかな?)のプロンプトと補完を使ってた
git/contrib/completion at master · git/git

けど、偶然もっといい見た目のをみつけたのでそっちにする
magicmonty/bash-git-prompt: An informative and fancy bash prompt for Git users

比較
  • 今まで
    image.png

  • 新しいの
    image.png
    なんかかっこいい!できれば日時は上、ブランチ状態はしたに来てほしいのでもうちょっと改善したい

それぞれの参考的なサイト

git-prompt.shの参考 : git-completionとgit-prompt導入用スニペット(Bash向け) #Linux - Qiita
bash-git-promptの参考 : bash-git-prompt でレスポンスを改善するための設定メモ #Git - Qiita

mainブランチに直接pushを禁止する

ブランチのsetting->branchで設定できる。Lockにチェックを入れる
参考:GitHubでブランチ保護を有効にする #Git - Qiita

実際にやってみるとエラーになってくれる

✔ ~/documents/RR-automate [main ↑·1|⚑ 3] 
17:19 $ git push origin main
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 342 bytes | 24.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
remote: Bypassed rule violations for refs/heads/main:
remote: 
remote: - Changes must be made through a pull request.
remote: 
remote: - Cannot change this locked branch
remote: 
To github.com:tontoroRR/RR-automate.git
   1c63c8b..f88bf9c  main -> main

git aliasに引数渡したい、

あるブランチが今のブランチにすでにマージ済みかどうかを確認する方法を調べたところ、下の方法でできることがわかった

$ git merge-base --is-ancestor (確認したいコミットID) HEAD

参考:(git) 指定したコミットが含まれるか確認する #Git - Qiita

長いのでaliasにしたいと思い何も考えず以下のようにした

alias config alias.in "merge-base --is-ancestor $(git log -1 --pretty=format:$h $1) HEAD"

けどこれはエラーになる、だめです

ちょっと調べたところ、こうするとうまくいった

alias config alias.in '!git merge-base --is-ancestor $(git log -1 --pretty=format:$h $1) HEAD #'

参考:command - Git alias with positional parameters - Stack Overflow

あたまの!はそれ以降をgitのコマンド(?)として読むのではなく、shellで実行できる何かとして処理するといった意味らしい
最後の#で引数以降が重複して渡されないようにコメントアウトしている

もし#がないとgit in some_branchは次のように解釈される

$ git merge-base --is-ancestor $(git log -1 --pretty=format:%h some_branch) HEAD some_branch

引数が$(git ~~) HEAD some_branchと三つになる --is-ancestorは引数を二つとるのでエラーとなる
そこで#をつけるとこうなる

$ git merge-base --is-ancestor $(git log -1 --pretty=format:%h some_branch) HEAD # some_branch

そう、some_branchがコメントアウトになる

引数の渡し方がわかんなかったときはbashの関数定義してshellのaliasつかおうとしたが、git補完できなかったので早々に却下(やる方法はあると思うけど探すのめんどいし、今から.bashrcに入れるのもめんどいし、一番イヤなのはgit-completion.shと二重になること、とにかくイヤ)
git aliasだととくに何もしなくてもgit-complete.shを読み込んでおけば補完もしてくれてとても便利

1
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
1
0