以前Forkについて書いたのですが、GitKrakenについても書いておきます。
- 概要
- GitKraken の設計目標
- 価格
- プロファイル
- GitHub.com とのOAuth認証
- SSH鍵
- UI
- コンフリクト解消
- ターミナル統合
- LFS
- シングルスレッド
- ファイルロック
- Git-hook
- まとめ
概要
UnityリポジトリではGit操作が重く悩ましいのですが、それを除くとGitKrakenは大好きです。速度のForkか、使いやすさのGitKrakenか、両取りのGitKrakenターミナル統合か、と用途に応じて使い分けるのも手でしょう。
- GitKrakenを商用で利用するなら有料版が必須。OSS開発だけなら無料版が利用できる
- 視点移動が少なく使いやすい
- ターミナルタブはコマンド派でも操作しやすくGitKrakenのツリーも使えて便利
- Unityリポジトリなどサイズの大きいリポジトリでGit操作が重くなりやすい
- GitKranenのpush時にかかるGit-hookが失敗するようになることがある
GitKraken の設計目標
GitKrakenは、GitKrakenで一連のGit操作 (clone, fork、pr) が完結することが目指されており、実際実現できています。目指すゴールとコンセプトがはっきりしているのは良いことです。ではこの設計目標は実際どのように達成されているのか見てみましょう。
GitKraken (@GitKraken) November 2, 2021
価格
GitKrakenには無料版、有料版としてPro $4.95 per user/month、Teams $8.95per user/monthあとはEnterpriseがあります。無料版はOSS利用のみ、GitHub.comのみ接続可能、プライベートリポジトリが開けない、プロファイル切り替えができないなどの制約があります。Proは複数のVCSに対して接続1でき、コマーシャル利用が可能になります。Teamsは10人を超えるユーザー管理、複数チーム管理ができます。
企業利用としても、ユーザーに対するライセンス割り当てをフローティング管理できるので、有料版は企業にも優しいなぁと感じます。

プロファイル
有料版で利用できる、複数のプロファイル設定は非常に優秀です。それぞれのプロファイルにメアド、VCS認証情報やデフォルトCloneフォルダが持てるので、個人でGitHub.comを使うとき、会社でGitHub.comを使うとき、会社でGHEを使うとき、会社でAzureDevOpsを使うとき、とすべてプロファイルを分けたりできます。
プロファイル切り替え = .gitconfigの[user]セクションのname, emailの書き換えになります。dotfilesで .gitconfigを管理している場合、プロファイルを切り替えで意図しない書き換えがpushされないか気を付ける必要があります。プロファイルが[credential]を見てくれればいいのですがそうはならないのが残念です。 [include]で指定した別.gitconfigの[credentials]に定義した.... を期待してはいけない。
GitHub.com とのOAuth認証
GitKrakenをGitHub.comで使うにはOrgに対してOAuth Appを許可します。これは結構厄介で、サクッと使おうにもGitKrakenは利用できないというケースがよくあります。一方で、GHE (Selfhost) やAzure DevOpsはPAT認証なのですんなり使えます。
プロファイルの[credential]の件も併せて、できればCLIの認証と同じ仕組みでGitKrakenが利用できるといいのですが。

SSH鍵
GitHub.comはSSHで認証するのですが、そのSSH鍵の生成、GitHubへの登録など一通りの操作はGitkrakenで完結します。これは結構重要で、こだわりがないならいちいちSSH鍵生成のために別ツールを利用する必要はありません。とはいえ、GHEやGitLab、Azure DevOpsはPAT認証なので関係なかったりします。

UI
GitKrakenのUI最大の特徴はツリー画面です。ツリーは真ん中に位置し、左にブランチ、右にコミットが表示されます。

ツリーが見やすいと感じるのが、ブランチやタグがどのコミットを指しているかパッとわかること、複数ブランチから自分のブランチだけをツリー表示するSoloでのフィルタリングです。

左のブランチカラムは、ほかにもPR、Issue、Tag、Submodules、GitHub Actionsが表示されいます。普段の開発だとLocalのブランチ操作がメインですが、すでに上がっているPRをここからひらくこともできます。Tag操作もここで行えるなど、Gitの大半の操作が集約されています。

右のコミットカラムは、選んでいるコミットの表示やファイル変更を示し、その変更一覧とコミット操作も右カラムの画面切り替えで表示されます。ファイルの差分表示は、ツリー表示に代わって左+真ん中カラムが切り替わって表示されます。



このUI表示で何よりも素晴らしいのが、目線の移動がいかに少なくなるか設計されていることです。特にそれを感じるのが、ファイル差分を左+真ん中カラムを切り替えて表示することです。差分表示は幅・高さも広いほど作業効率が高い一方で、ファイル差分チェック中はブランチ状態やツリー状態は不要です。左+真ん中カラムのスペースを切り替えつつ、コミットにかかわるファイル選択は右カラムのままなので、視線移動が少ないのに必要な視野が確保されています。すごいです。
私が知ってるGit GUIクライアントでこういった視線移動に対する設計がきっちり行われていると感じるものは他になく素晴らしい。
コンフリクト解消
GitKrakenはMerge時にコンフリクトが起こってもコンフリクト解消が容易です。コンフリクト時はファイルDiffの表示が「コンフリクト状態と解消選択表示」に切り替わります。行ごとにどちらのブランチから変更を引っ張ってくるか選択ができるのでミスせず操作ができます。VS CodeやVimでの解消二度としたくない。

ターミナル統合
GitKrakenはCUIのみで操作するときでも便利で、push/pullのみCLIで行ってブランチ操作やツリーはGitKrakenを使うことができます。ターミナル統合のもう1つのメリットは、認証がGit CLIに準じることで「OAuth認証されていないリポジトリだけどGitKrakenを使いたい」ができます。そして隠れたもう1つのメリットが「git push/pullがターミナル操作なのでGitKrakenでpush/pullするより高速」なため大きなリポジトリでも操作が快適です。操作が早くてツリーが便利、を実現するのがターミナル統合の真の価値!
ちなみにGitKrakenはForkやSourceTreeのようなカスタムコマンド連携はないのですが、ターミナル統合ならカスタムコマンドも利用可能なので、いつもの感覚で利用できるでしょう。


LFS
Unityを使っていると出てくるのがGit lfsです。2 GitKrakenは、リポジトリルートの.gitattributesにlfs設定を記載していれば、pull操作でgit lfs pullが自動的に実行されるのでLFSを意識しなくなり実体化忘れもなくなります。ForkなどはGit lfs統合がなく、都度git lfs pullが必要なのでGitKrakenの便利さはすごいです。逆にこのLFS統合によって、1回1回のpull操作が待たされるという感じもあるので、LFS統合がいいか悪いかは微妙なラインもありえます。Preferenceでは有効無効を設定できないので仕方ないかなぁ。

シングルスレッド
GitKrakenにはいくつか課題があります。大きなストレスの1つが「1つ操作をしているとUIがロックされて連続操作ができない」ことです。例えば、Aリポジトリタブでpull中に、別のBリポジトリタブに切り替えることもできません。また、バックグラウンドでGit fetchが走っていて、UI上は何の表示もないのに無言で操作できないことがまれによくあります。ストレスに拍車をかけるのはリポジトリが大きい場合の挙動の遅さです。.gitが大きなリポジトリ (体感で10GB超~) でgit操作 3 に時間がかかるようになります。
シングルスレッドはGitKraken最大の弱点であり、これが理由でForkに魅力を感じるのはよくわかります。
ファイルロック
GitKrakenのもう1つの課題がファイルロックでしょう。GitKrakenで開いているリポジトリの .GitはGitKrakenにつかまれているため、Windowsでリポジトリのフォルダが消せなくなります。そんな時はGitKrakenを終了させてからフォルダを消してみるといいでしょう。
Git-hook
GitKrakenの最後の課題が、push時に仕込まれているGit-hook操作です。公式ドキュメントにデフォルトhookの記載がないのですが「push時にgit-hookが失敗してpush自体できない」ことがあります。git-hookが一度できないとリポジトリをgit cloneしなおしてもずっと解消しなくて詰むことがまれにあるので終わったとなることがあります。
guitarrapc_tech (@guitarrapc_tech) October 7, 2021
2025/1/3追記: shift-jisのファイルがコミットされているとこの症状が出るようです。これはGitKrakenのバグですかね。
まとめ
GitKrakenは、細かい課題や速度に大きな課題があると感じます。しかしUI設計やプロファイルなど使いやすい機能が多く、Git GUIクライアントとしては最も好みです。
私もUnityでLFSなリポジトリだけはForkを使ったりしています。くやしい。