3

私は最初の Hudson + Git プロジェクトをセットアップしています (以前は Hudson + SVN で多くのプロジェクトを行っていました)。私たちのリポジトリは非常に大きいため、クローン ステージは遅いと予想していましたが、フェッチ + マージが使用されている後続のビルドも同様に長くなります。次のオプションが有効になっています。

  • ビルド前にマージ
  • チェックアウト後の清掃

「ワークスペースを一掃する」ことはしていません。

...
リモート Git リポジトリからの変更のフェッチ
アップストリームの変更を git@github.com:username/ProjectFoo.git から取得する
[Foo] $ git fetch -t git@github.com:username/ProjectFoo.git +refs/heads/*:refs/remotes/origin/*

この時点で、非常に長い間停止します。最終的に終了すると、期待どおりに進行しているように見えます。

[Foo] $ git ls-tree HEAD
[Foo] $ git rev-parse origin/mybranch
リビジョン c883d59dd5a506a0b586f679a256f539712bfccc (origin/mybranch) のビルドを開始
GitAPI が作成されました
リビジョン c883d59dd5a506a0b586f679a256f539712bfccc (origin/mybranch) のチェックアウト
[Foo] $ git checkout -f c883d59dd5a506a0b586f679a256f539712bfccc
[Foo] $ git tag -a -f -m "Hudson Build #2" hudson-Foo-2
ブランチ origin/mybranch での変更の記録
[Foo] $ git whatchanged --no-abbrev -M --pretty=raw c883d59dd5a506a0b586f679a256f539712bfccc..c883d59dd5a506a0b586f679a256f539712bfccc
ワークスペースの清掃
[Foo] $ git clean -fdx
...

fetchGit Bash コマンド ラインから同じコマンドを実行すると、ほぼ瞬時に実行されます。

何が起こっているのでしょうか?または物事をスピードアップするためのヒント?複製されたリポジトリは 210MB であることに注意してください。(約 10 年分のコード履歴。)

4

3 に答える 3

8

私もこの問題に遭遇し、回避策を見つけました。Hudson がサービスとして実行されると、通常のデスクトップ環境にはない何かが失われ、ネットワークに関連する何かがプロセスごとに再ロードする必要があります。msys-1.0.dll は netapi32.dll に何かを読み込もうとするため、時間がかかりすぎます。そのため、PuTTY から plink.exe をダウンロードし、代わりにそれを使用するように GIT_SSH 環境を設定しました。問題が回避されました。

于 2011-01-07T18:28:11.833 に答える
2

これは遅い答えかもしれません。しかし、私の環境でJenkins/HudsonがWindowsサービスとして実行されている場合、極端に遅い問題は解決します。
重要なポイントは、Windows サービス アカウントで git に rsa キーを取得させることです。以下のように動作するようにしました。

  1. [コントロール パネル] -> [管理ツール] -> [サービス] を開き、「Jenkins」を見つけます。
  2. 右クリックして [プロパティ] -> [ログオン] を開き、管理者アクセス権を持つユーザーとして Jenkins ログオンを割り当てます。
  3. Jenkins を再起動すると、「git fetch」が Linux の場合と同様に稲妻になります。

plink は pageant から rsa キーを取得できないため (pageant は別のユーザー セッションにあります!)、ccutrer によって提供されたソリューションは、元の試用版では機能しませんでした。私の手順が展開されたとき、それまでに openssh と plink のいずれかがうまく機能する可能性があります。

于 2014-12-02T10:37:55.253 に答える
1

フェッチ用に認証済みアクセスの代わりに匿名アクセスを試していただけますか?

$ git config remote.origin.url git://github.com/username/ProjectFoo.git   # read-only
$ git config remote.origin.pushurl git@github.com:username/ProjectFoo.git # authenticated

Hudson ジョブ内でフェッチがまだ遅いかどうかを確認しますか?

図については、「 MsysGit で Github を使用する」を参照してください。

于 2010-08-06T20:30:51.317 に答える