Subversion リポジトリから最後の n リビジョンを git-svn でクローンするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/747075

質問

問題

Subversion リポジトリから git-svn を使用して浅いコピーを作成するにはどうすればよいですか。最後の 3 つのリビジョンだけを取り出すにはどうすればよいでしょうか?

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

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

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

これまでの私の発見

今のところ私が見つけたのは -rN オプション N プルするリビジョンです。例:

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クローン

git-svn

役に立ちましたか?

解決

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

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

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

他のヒント

私は、巨大な 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 それを実行し、ブランチ上の最初のものを見つけます (実行時にリストされる最後のもの)。

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

これまでのところ、すべてのブランチを追跡する手間に見合う価値があるとは思っていません。クローン作成に時間がかかりすぎ、svn と git が期待どおりに連携しません。私はパッチ ファイルを作成して、別の svn ブランチの git clone に適用することが多いです。

...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     
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top