Open3
So You Think You Know Gitからのtakeaway
github co-founder, pro gitの著者 Scott Chaconさんのトークです
- git command 大まかに82 porcelain + 63 plumbingコマンドがある、このトークは主に前者の話
- 44 main -> add, commit, push …
- 11 manipulators -> config, reflog, replace …
- 17 interrogators -> blame, fsck, rerere
- 10 interactors -> send-email, p4, svn
- config系
-
alias
を設定するgit config --global alias.<str> '<cmd>'
-
!
をつけるとことでbashスクリプトもaliasにできるー>知らなかった
-
- conditional configs with
[includeIf "gitdir:~/projects/work/"]
- 仕事とプライベートの環境を分けるとかによく使う
-
rerere.enabled true
- reuse recorded solution -> 例えばリベースするときに同じ競合を何回も解消しないといけないときに、これは初回のものをメモしてくれるので2回目以降は自動で解消してくれる -> 神機能知らなかった -> 繰り返しがあるときにもっと良いやり方がきっとあるとの真理
-
- odies but goodies
-
git blame
-
-L 10,20:<file>
-> little -> ファイルの一部のblameを出す -
-L :<class/function/..._name>:<file>
-> gitにその名前の部分を探して出してもらう -
-w
-> whitespaceを無視 -
-C
-> コードの移動を検知する -> ここの面白いのは、同じフラグを2回、3回つけることで効果がまた違う
-
-
git log
-
-S <str|regexp> -p
->ログから検索して出す
-
-
git reflog
今までやったことは記録できるのでタイムトラベル -> これはよく使う、非常に有用 -
git diff
-
--word-diff
->名前通り、デフォルトはlinebase
-
-
- new stuff
-
git branch --column
-> ブランチを画面サイズに合わせて複数列に表示させる(lsの見た目)、地味にみやすくなる -
git push --force-with-lease
-> force pushする際にもしリモートのHEADが、ローカルから見て想定するHEADと違うときにリジェクトするようにする(例えば別の人がすでにコミットを入れた場合) -> 非常に有用、デフォルトにしたい -> デフォルトじゃない理由は、gitは常にbackward compatibleだからだとQAで答えている - signing commits with ssh -> sshキーを使ってコミットにシグネチャーをつける、github上に該当public keyをつけておくと、verifiedが表示される
-
git maintenance start
-> everyone do this today! -> cron jobを追加して、さまざまな操作を早くする- 例:prefetchを1h毎にに実行するのでfetchは早くなる
- 他は下のbig repo stuff参照
-
- big repo stuff -> 50万以上のファイルがあるレポ、windows OSが300GB以上、350万以上のファイル -> この辺の改善は上記の
git maintenance
に含まれている- prefetching -> git for-each-ref | grep prefeで確認できる
- commit-graph -> logはこれに依存する
- filesystem monitor -> git statusが早くなる
- git clone --filter=blob:none -> blobファイルをダウンロードしないようにする、オンデマンドに
- git clone --filter=tree:0 -> 普段開発ではなく、CIの時間短縮に活用できる
- monorepo stuff
- sparse-checkout -> ものレポの一部だけをクローンする
- github stuff
- allow merge types -> merge commits派 vs rebase派、いずれもサポート可能
- 自分のチームではどちらかというとmerge commit派、feature -> mainのときにsquash merge commit、main -> featureもmerge commit
- auto merge -> CI成功後自動マージする
- 自分のチームではよく使われる機能
- allow merge types -> merge commits派 vs rebase派、いずれもサポート可能
- GitButler
- 現在Scott Chaconさんが所属のチーム、GitのGUIプロダクト
- 同時に複数のブランチで開発を進められるのが特徴的(switch/checkout不要)
- Scottさん本人はcli派らしいが、interactive addingを使う際にGUI推し -> より効率的なツールを選ぶ原則
part 2