20

単純な分岐、スタッシングなどの Git の優れた機能を使用できるようにするために、Git を SVN リポジトリのフロントエンドとして使用しようとしています。

問題は、SVN リポジトリが非常に大きく (8,000 リビジョン)、多くのブランチとタグ (古いものと新しいもの) が含まれていることです。

これは、フェッチ、ブランチ、およびタグのディレクティブを含む構成を備えた、標準に近いレイアウトです。

最も古いブランチとタグはリビジョン 10 を参照するため、毎回リビジョン 10 以降のsvn fetchリポジトリ履歴全体を読み取ることになり、低速の接続では数時間かかる可能性があります。

トランクのみを追跡する場合は問題ありませんが、新しいブランチとタグを git に認識させたいと考えています。

私は通常、git log -1私がいるブランチを見て、コメントからSVNリビジョンを取得するので、git svn fetch -r7915:HEADまたは同様のことができます。私はそれが何だと思いgit svn fetch --parentます。しかし、なぜこれを行う必要があるのでしょうか。

私は Windows を使用しており、TortoiseGit を非常にうまくサポートしていますgit-svnが、TortoiseGit のみが実行されるため、ちょっとgit svn fetch行き詰まっています。

私は何か間違ったことをしていますか?最初の操作が完了したらsvn fetch、迅速な操作になることを期待しています。svn clone -s

4

4 に答える 4

12

答えてくれてありがとう。しかし、彼らは私を本当に助けませんでした。

このコマンドは、これまでのところ最良の解決策です。

git svn ログ --all -1 | \
  sed -n '2s/r\\([0-9]*\\).*/\\1/p' | \
  xargs --replace=from git svn fetch -r from:HEAD

git svn log --allこれまでにフェッチされた最大の SVN リビジョン番号を見つけるために使用し、その時点以降のすべてをフェッチします。

git svn fetchこのように振る舞うオプションがあればいいのにと思います。SVN リビジョンが変更されない限り、git svn毎回同じリビジョンを何度もフェッチする必要はありません。

于 2010-03-04T11:14:15.760 に答える
5

gitリポジトリに完全な履歴が必要ない場合は、標準のgit-svn統合ではなく、以下のリンクで詳しく説明されている「git+svn」アプローチを確認することをお勧めします。履歴をインポートしないため、gitへの最初のインポートは非​​常に高速である必要があります。

「メリット、デメリット、および教訓」というタイトルのセクションを必ずお読みください。

http://www.lostechies.com/blogs/derickbailey/archive/2010/02/03/branch-per-feature-how-i-manage-subversion-with-git-branches.aspx

于 2010-03-03T21:26:29.340 に答える
3

正しく使用しています。多くの履歴を持つ Subversion リポジトリの最初のインポートは非​​常に遅くなります。

悪いニュースは、Subversion のブランチとタグが単なるディレクトリでgit-svnあるため、最初のリビジョンまでさかのぼって各ブランチを先頭から読み取るという悲観的なルートを取らざるを得ないことです。はい、Subversion の使用で規律を守っていれば、同じデータが何度もフェッチされることになりますが、実際の使用パターンでは、これはほとんどありません。

夕方にクローンを開始し、翌朝には素敵な git リポジトリに戻ってきてください!

クローンを作成すると、次のgit svn fetch警告も表示されます。

大規模なリポジトリでは時間がかかる場合があります

Subversion は単純で馬鹿げているため、git はゆっくり処理する必要があります。

于 2010-01-08T17:59:00.980 に答える
0

SVN リポジトリにシンボリック リンクはありますか? そうでない場合は、次の設定を試しましたか:

svn.brokenSymlink回避策

これにより、壊れたクライアントによって SVN にチェックインされた壊れたシンボリック リンクを回避するための潜在的に高価なチェックが無効になります。シンボリック リンクではない空の BLOB が多数ある SVN リポジトリを追跡する場合は、このオプションを「false」に設定します。このオプションは、git svn の実行中に変更することができ、次にフェッチされるリビジョンで有効になります。設定されていない場合、git svn はこのオプションが「true」であると想定します。

于 2010-07-18T21:20:49.223 に答える