tech.guitarrapc.cóm

Technical updates

Git GUIクライアントと GitKraken と Fork

Git の GUI クライアント、いろんなツールがあってそれぞれ使いやすさがあります。

ここしばらくはForkをメインで使っていた中で、私がForkに感じた良さと苦手なことをメモしておこうと思います。

普段私は、GitKraken をメインにしていますが、サイズの大きなリポジトリでは Fork を利用しています。(ここ最近は手になじませるため、Forkをメインにしている)

私がgitで利用するのは、主にコードのコミット (Unity や C#、Go、React 他)、並びに Git LFS です。 バイナリファイルや、PSD や画像ファイルを編集してコミットする機会は少ないので無視します。

コミット頻度は高く、ブランチを切ったり、マージ操作、ファイルごとの差分確認、stageのフラット/ツリーでの確認、コンフリクト解消を重視しています。

tl;dr;

  • SourceTree 使っているなら、 Fork は上位互換。有料なのだけネック。
  • GitKraken 使っているなら、 Fork はgit操作が高速でUIもロックされないのが快適。ただ、UIのコンセプトが違うので一つ一つの操作が手間に感じる。
  • Git GUI クライアント、まだまだ全然決定版がない。

SourceTree使ってた、 あるいは10GB 超えるようなリポジトリだったら、私は Fork 使います。そんなに大きなリポジトリじゃないなら、GitKraken 使っているのが幸せです。

GitKraken が Fork の早さをもって、ファイルロックが起こらなければ最強といえるんですがそんなものはない。あるいは、Forkが GitKraken のように操作ごとの視点の動きを考慮したUIになればいいですが、そんな未来も来ないでしょう。諸行無常。

Fork とは

Fork は、無料で試用ができる有料Git GUIクライアントです。$49.99 (One-time purchase)

試用のみ無料ですが、無料版は現在存在しないと明言されています。その上の発言と一貫性取れてない気がするけど。有料の価値はあるいい製品です。

git-fork.com

OAuth 認証が必要なので、Organizationで使うには Fork をOAuth 許可する必要があります。

SourceTree と非常に似通っているので、SourceTreeを使っていたら違和感なく移行できるでしょう。 Git操作が高速なのが特徴で、例えば10GB越えのリポジトリでUnity で3DモデルやLFSを使っていても、checkout、diff、stage、commit、push、pullのいずれも重いと感じることなく操作ができます。

製品としては、SourceTree の高速版という印象でほぼずれはないと思います。

SourceTree比較のFork

SourceTree を使っていると Fork は気持ちいいぐらい使いやすいと思います。

有料なだけの価値があります。

pros:

  • どの操作でも固まらない
  • ファイルdiff 違和感はなく高速。
  • 操作UI も違和感ほぼなし
  • push/pull が爆速
  • checkout が爆速
  • tree が SourceTree より見やすい

cons:

  • 有料
  • OAuth 認証が必要

特筆

特筆することはないです。 SourceTree 使っているなら使いやすくて軽い、でも有料かー。という印象に落ち着くと思います。

GitKraken比較のFork

GitKraken で重いと感じているならFork は高速にgit操作できるのですごくいいです。 一方で、GitKraken に慣れている場合、Forkは一つ一つの操作で目線を移動する必要があり一貫した操作性がないのが使いにくいと感じます。

有料の価値があるかは、GitKrakenが重いと感じるか次第。

pros:

  • push/pull が爆速。
  • checkout が爆速。
  • リポジトリごとの操作が非同期でロックされないので快適。
  • 素直なgit。hooks など妙な挙動がない。
  • カスタムコマンドができる。(私はいらないけど)

cons:

  • diff をファイルの下に出すのはごみといわざるをえない。
  • 操作していて、視点があっちこっち見ないといけない。
  • 画面内でタブを使っているので、一覧しても見えないものがある。
  • branch作成、ammend など些細な操作が厳しい。
  • tree が厳しい、見やすくはない。
  • repo 初期化はセルフサービス。
  • repo 追加もセルフサービス。検索などない。
  • Conflict 解消がやりにくすぎる、Forkでやるの無理では...
  • SSH 鍵生成などもセルフサービス。
  • PR は Web でどうぞスタイル。
  • ライセンス管理は原始的。

特筆

視点の移動はかなりあって、私がGitKraken に慣れてるときに Fork を久々に触って使いにくく感じた原因はこれです。 コンセプトの違いはあると思いますが、油と水ぐらい違う。

またツリーに関しては、好みがありますが、結構読みやすさが違います。 個人的に Fork のツリーはよくある表示ですが、コミットメッセージに食い込んでて、普段見せたいもの(head/changeの有無/コミット一覧)と、必要に応じて見たいもの(ブランチ名、commit user、commit id、commit日付) の区別がついていないと思います。

f:id:guitarrapc_tech:20211104020627p:plain
上 Fork の ツリー、下 GitKraken の ツリー

GitKraken の評価

Forkだけ評価しても一方的なので GitKraken も書きます。

GitKraken は、個人利用は無料利用が可能な有料Git GUIクライアントです。$4.95 per user/month (paid annually)

無料版だと OSSのみ + VCS が github.com だけだったり制約があります。有料の価値はあるいい製品です。

www.gitkraken.com

OAuth 認証が必要なので、Organizationで使うには GitKraken をOAuth 許可する必要があります。

総じて良く、私は個人的には GitKraken が最も好きな GUI Git クライアントです。 リポジトリが小さい限りは cons に挙げたデメリットはほぼ発生することなく、非常に快適に使えます。 いろいろ GUI Git を使ってきていますが、最も操作しやすく、UIとツリーが洗練されていると感じます。

Fork とは全然違うので、pros/cons を挙げておきます。

pros:

  • git 操作で操作時に視点を移動させないでいい
  • ツリーが見やすい
  • diff を見ながら表示を3パターンに変更できる。(Hunk/Inline/Split)
  • Conflict 解消がしやすい、優秀。
  • Terminal 統合ができるので、CUI 派でも使いやすい。Terminal なら重くもないし。
  • LFS 操作に意識することがない (LFSが記述された .gitattributes がルート配下にある前提)
  • Profile があり、Profileごとにメアド、VCS認証など設定を持つことができます。
  • git terminal の設定や SSH鍵の生成、GitHubへの登録など一通りの操作が完結する。
  • 有料版で各種VCS に対応している。(商用するなら有料版なので自然とそうなるはず)
  • 商用で、ライセンスのシート管理が可能。Proでも個人でライセンス管理しやすい。

cons:

  • カスタムコマンドはない。
  • 商用利用には有料版が必要。
  • .git が大きなリポジトリ (10GB超えぐらい) でpush/pull が重い。(diff/stage/commit は影響なし、push/pull/checkout が影響を受けやすいです)
  • 一つの操作ごとにUIがロックされるので、連続して別のリポジトリタブに行って操作などができない。
  • git hooks に余計な処理を挟んでおり、まれにバグって詰む (どうしようもない)
  • GitKraken がgit内部のファイルをつかんでいることがあり、Windowsでファイルを消せないことがまれによくある。
  • ディレクトリをロックしていてチェックアウト失敗することがまれによくある。
  • background fetch が走っていて、無言で操作できないことがまれによくある。

特筆

Gitkraken で日常的に困る可能性があるのが、リポジトリが大きいと重いこと & 操作のロックでしょう。 また、サイレントにファイルロックしていることによるストレスがたまにあります。

一方で、使いやすさに関してはすごくいい... UI設計者すごい、尊敬します。

基本的に、GitKraken で git の一連の捜査 (clone, fork、pr) が完結することが目指されており、実際実現できています。 目指すゴールとコンセプトがはっきりしているのは良いことです。

UIの秀逸さ

GitKranen は、git 操作における視点をよく考えてUI/UX が設計されていると思っています。 画面内の要素はタブなどで表示が隠されていることがないので、操作によらず一貫した見方ができます。

また、git操作で視点はばらつくことがほぼないのが特徴です。例として、次のような画面を用意しました。

f:id:guitarrapc_tech:20211104000337p:plain
GitKrakenのUI

  • ブランチの操作をしたいときは左ペインを見て、中ペインはツリーを示す。
  • コミットのためのファイル操作をするときは右ペインを見て、中ペインに大きくdiff を示す。
  • よく使うgit操作の Pull/Push/Branch/Stash/Pop/Terminal などは上部にボタンを用意

操作を追ってみましょう。 常に視点が、 中ペイン + 左ペイン or 右ペイン + 中ペイン と動かさなくて済むようになっているのがわかります。

ブランチを切る

まずはブランチを切ります。

やりたいことに必要なのは、ツリーの状態とブランチ操作です。 そのため、視点は中ペイン (ツリー) と左ペイン (ブランチ) に限定されます。

  • ツリーの状態を見る (中ペインのツリーを見る)
  • ブランチ状況を確認する (左のブランチ一覧を見る)
  • ブランチを切る (左のブランチ一覧から追加 -> 中ペインのツリーを見る)

f:id:guitarrapc_tech:20211104000810p:plain
ファイル変更があるときの画面1

コミットをする

ローカルのファイル変更をしたのでコミットをします。

やりたいことに必要なのは、ツリーの状態とファイル一覧とファイルごとのdiff です。 そのため、視点は中ペイン (ツリー/diff) と右ペイン (ファイル一覧) に限定されます。 diff の時に、中ペインがツリーではなくdiff を大きく表示するのがよく考えられていると思います。

  • ローカル変更を確認する (右のファイル一覧、ファイルごとのdiffは中ペインのdiffを見る)
  • stage 操作をする (右のファイル状況で変更を確認)
  • コミットする (右のファイル状況で変更を確認)

f:id:guitarrapc_tech:20211104000858p:plain
ファイル変更があるときの画面 2

f:id:guitarrapc_tech:20211104000952p:plain
ファイル変更があるときの画面3

Push & PR作成

コミットしたので、pushしたり PR を作ったりします。

やりたいことに必要なのは、ツリーの状態とブランチ操作です。 そのため、視点は中ペイン (ツリー、pushボタン) と左ペイン (ブランチ一覧、PR一覧) に限定されます。

  • プッシュする (上の操作ペイン)
  • PR を作る (左のブランチ一覧を見る)

f:id:guitarrapc_tech:20211104001112p:plain
PRを作るときの画面

文章とスクショで言われてもよくわからない場合、無料版を触るといいです。

.git が大きなリポジトリ (10GB超えぐらい) でpush/pull が重い

3GB 程度なら快適ですが、10GB 程度になると push / pull が重くなります。 これは明確に CPU やネットワークにかかわらず起こるので欠点です。

fork ぐらい早くなれば完全にお勧めできるんですが、重いを感じるレベルになるリポジトリでは欠点が目立つ可能性があります。

git hooks のつらさ

めったにないのですが、この間起こって詰みました。 以前は適当に clone しなおしたら行けたんですが今回はダメっぽくて困りました。(今見たらいけてる、謎)

Fork の縦ペインで視点移動は減らせるのか

Fork を水平、縦でペイン表示変更してみて視点移動を減らせるか試してみたので、Twitter にあげたのをぺたり。 結果は、縦なら少しは良くなるけど、diff がどうしようもなく使いにくい。