2025-01-30

Sourcetreeのプッシュ/プルがやたらと遅い

Atlassianから、2025年4月28日以降Bitbucket無料版で利用できるストレージ枠が縮小されるというお知らせが届いていた。今のところ、縮小されるストレージ制限の容量内におさまってはいるものの、先行き不安なので徐々にLAN内の自前のGitサーバーに引っ越していくことにする。

なわけで、Mac環境のGitでローカルリポジトリと連携するリモートリポジトリを変更する、リモートリポジトリを移行する方法をメモしておく。

Bitbucketでホストされているリポジトリ git@bitbucket.org:username/repo.git から、自前のGitサーバーの共有リポジトリ git@myserver.local:repo.git に引っ越す例:

ローカルリポジトリとリモートリポジトリの内容は同じになっており、「nothing to commit, working tree clean」な状態であるものとする。 (心配性の人はローカルリポジトリのバックアップを作成しておいたほうが良かろう。)

現在、ローカルと連携しているリモートリポジトリの設定を確認する。

% git remote -v
origin  git@bitbucket.org:username/repo.git (fetch)
origin  git@bitbucket.org:username/repo.git (push)

自前のサーバー上に同名のベアリポジトリを作成する。

myserver$ git init --bare repo.git

連携するリモートリポジトリの設定を自前のGitサーバーに変更する。

% git remote set-url origin git@myserver.local:repo.git
% git remote -v
origin  git@myserver.local:repo.git (fetch)
origin  git@myserver.local:repo.git (push)

すべてのブランチと、すべてのタグを新しいリモートリポジトリにプッシュする。

% git push -u origin --all
% git push origin --tags

できあがり。

のハズなんだが、アレレ、なんか変だぞ。いままでと違う!?

GUIクライアントのSourcetreeを使うとプルにえらく時間がかかる。

変更がまったくない状態でのプル操作にも関わらず、2分30秒もかかっている。 エラーが出るわけではなく、待っていれば終わるのだがとにかく異様に遅い。

Sourcetreeのリポジトリメニュー「プル...」を選択し、「詳細な出力を表示」してみると git fetch origin; git pull origin master を実行しているようだ。

同じ処理をターミナルからコマンドラインで実行してみると、一瞬(1秒もかからない)で完了する。

SourcetreeアプリのGUIから実行した場合だけ、プッシュやプルなどリモートがらみの操作が異様に遅い。なぜに?

どうやら名前解決に問題があるようだ。 「myserver.local」のようなBonjour名(ドメイン名が .local になっている、mDNSで使われるホスト名)を使用していると、このトラブルが発生する。

これについて、Sourcetree(バージョン 4.2.10)側に何か設定項目がないか探したが見当たらない。

Sourcetreeは Bitbucket + Mercurial の時代から便利に使ってるんだけど……

どなたか解決方法を知っていたら、こっそり教えてくださいませませ。 (サーバーのIPアドレスを直接指定しろとか、内部向けDNSを用意しろとか、/etc/hostsを変更しろとかいうのはナシで。)


サーバー(LAN内)でIPv6が構成されていないと問題が発生するようだ。 対症療法として(可能なら)Sourcetreeを利用するMac側のIPv6を無効化する手がある。

関連記事: 「MercurialからGitへの移行

0 件のコメント:

コメントを投稿