4

プロジェクトの新しいリポジトリを作成し、それに既存のコードベース(llvm)を追加しています。このコードベースは約18,000ファイルであるため、最初のコミットに多くの時間がかかります。(5時間読む)

この巨大なコミットをいくつかの小さなコミットに分割する方法はありますか?それがより速く完了することができるように?

4

4 に答える 4

6

多数のファイルを含む新しいリポジトリをシードする場合は、リモートマシンからファイルをコミットするのではなく、サーバーからのコマンドを使用することを強くお勧めします。これを行う最も簡単な方法は次のとおりです。svn import

  1. コードを単一のアーカイブにバンドルします(gzip、7zipなどを使用)
  2. そのアーカイブをサーバーに転送します(rsync、scpなどを使用)
  3. サーバーにリモートでログインします
  4. アーカイブを一時ディレクトリに解凍します
  5. svn importリポジトリのシードに使用

ほとんどの場合、これは大幅に高速であることがわかります。ネットワークを介した単一の大きなアーカイブの転送は、圧縮を考慮していなくても、通常、多くの小さなファイルを転送するよりもはるかに高速です。Windowsを使用すると、パフォーマンスの違いが大幅に大きくなります。Subversionの特定のバージョンには、各ファイルが個別のネットワーク接続を開いたり閉じたりするWindowsのバグがあり、操作全体で単一のネットワーク接続を使用する場合に比べて、かなりのオーバーヘッドが追加されます。

于 2012-08-09T17:18:35.723 に答える
2

小さなコミットが重要になる場合があります。

  • リポジトリは、Apacheのmod_dav_svnによってhttp経由で提供されます
  • パスベースの認証が使用されています
  • SVNPathAuthz short_circuit設定されていません
于 2013-02-09T12:47:58.890 に答える
1

個々のファイルを指定することで、コミットを分割できます。ただし、これによって高速化される可能性は低くなります。ファイルをネットワーク経由で移動し、ディスクに書き込む必要があります。実際、Subversionは更新のある時点でリポジトリをロックする必要があるため(一意のリビジョン番号を割り当てることができるように)、処理が遅くなる可能性があります。

ローカルディスクにリポジトリを作成し、そこでコミットを実行して(ネットワークのオーバーヘッドを排除)、リポジトリを最終的な宛先にプッシュする方がよいと思います。

于 2012-08-09T14:39:27.397 に答える
1

小さいチャンクを使用しても、費やされる合計時間が減少しない場合があります。

プロセスの起動、ティアダウン、および通信のオーバーヘッドを考慮すると、単一の巨大なコミットと比較した場合、いくつかの小さなコミットは、おそらく合計時間でより多くの時間を費やします。

どのオペレーティングシステムが使用されているかについては述べていませんが、SVN Tortoiseをインストールし、各コミットに必要なファイルをチェリーピッキングするのはどうですか?いずれにせよ、SVNはディレクトリベースであるため、18,000個のファイルが別々のディレクトリにある場合は、必ず、各ディレクトリを別々にコミットしてください。

コマンドラインを使用することがオプションである場合のいくつかのリンクを次に示します。

http://svnbook.red-bean.com/en/1.7/svn.ref.svn.c.add.html

http://svnbook.red-bean.com/en/1.7/svn.ref.svn.c.commit.html

于 2012-08-09T14:39:35.717 に答える