web-dev-qa-db-ja.com

Subversionリポジトリから最新のn個のリビジョンをgit-svnクローンする方法は?

問題

Subversionリポジトリからgit-svnを使用して浅いコピーを作成するにはどうすればよいですか?最後の3つのリビジョンのみをどのようにプルしますか?

git cloneコマンドは、オプション--depthを使用すると、Gitリポジトリから最新のn個のリビジョンを取得できます。つまり、リポジトリの浅いコピーを取得できます。例:

git clone --depth 3 git://some/repo myshallowcopyrepo

Git-svnに同様のオプションはありますか?

これまでの私の発見

これまでのところ、Nがプルするリビジョンである-rNオプションのみを見つけました。例:

git svn clone -rN svn://some/repo

ドキュメントによると、-r$REVNUMBER:HEADを使用する可能性があります。エラーメッセージを返した最新の3つのリビジョンを取得するために、次のことを試みました。

$ git svn clone --prefix=svn/ -s -rHEAD~3:HEAD http://some/svn/repo .
revision argument: HEAD~3:HEAD not understood by git-svn

したがって、HEAD~3を3番目で最後のリビジョン534の実際の番号に置き換えました。これは機能しましたが、3番目で最後のコミットのリビジョン番号を最初に把握する必要があります。

$ git svn clone --prefix=svn/ -s -r534:HEAD http://some/svn/repo .

ドキュメント

git-clone

git-svn

308
Lernkurve

クローンを開始するSVNリビジョン番号(-r$REV:HEAD)を指定することにより、Git-SVNで浅いクローンを指定する最も簡単な方法を既に発見しました。

例:git svn clone -s -r1450:HEAD some/svn/repo

Gitのデータ構造は、有向非巡回グラフ(DAG)のポインターに基づいているため、nコミットをさかのぼることは簡単です。ただし、SVN(およびGit-SVN)では、自分でリビジョン番号を見つける必要があります。

230
Paul

巨大なSubversionツリーから限られた数のリビジョンを取得するために頻繁に以下を使用していることに気づきます(svnリビジョン35000に近づいています)。

# checkout a specific revision
git svn clone -r N svn://some/repo/branch/some-branch
# enter it and get all commits since revision 'N'
cd some-branch
git svn rebase

そして、ブランチがどこから始まったのかを知る良い方法は、svn log itを実行し、ブランチの最初のもの(実行時にリストされた最後のもの)を見つけることです:

svn log --stop-on-copy svn://some/repo/branch/some-branch

これまでのところ、すべてのブランチを追跡するのに価値のある面倒を本当に見つけていません。クローンを作成するのに時間がかかりすぎ、svnとgitが一緒にうまく動作しません。パッチファイルを作成し、別のsvnブランチのgitクローンに適用する傾向があります。

89
Christian

... 7年後、砂漠でタンブルウィードが吹く...

受け入れられた答えに満足できなかったので、これを行うためのスクリプトをいくつか作成しました Githubで利用可能 。これらは、git svn cloneを使用したいが、リポジトリ全体を複製したくなく、履歴の途中から特定のリビジョンを複製したくない場合に役立ちます(多くのリポジトリを複製している場合があります) 。ここでは、最新のN個のリビジョンを複製できます。

git svn cloneを使用して、最新の50リビジョンを複製します

# -u    The SVN URL to clone
# -l    The limit of revisions
# -o    The output directory

./git-svn-cloneback.sh -u https://server/project/trunk -l 50 -o myproj --authors-file=svn-authors.txt

SVNリポジトリから以前のNリビジョンを見つける

# -u    The SVN URL to clone
# -l    The limit of revisions

./svn-lookback.sh -u https://server/project/trunk -l 5     
30
jonathan.cone