1

svn を指すことで machine1 に git リポジトリを作成し、git svn clone --trunk=http://foo/project
「git svn rebase」を使用して machine1 の svn から新しいリビジョンをプルし続けているとし
ます
。マシン2で???

これまでのところ、私はこれを行ってきました: on machine2
で svn を再指定し た場合、「git svn rebase」を実行すると、何も起こらず、プロンプトがハングします。git svn init --trunk=http://foo/project

「git svn fetch」を実行すると、git はすべての svn リビジョンを新品のように再インポートしようとしますが、それには 2 時間かかりますが、その後は正常にgit svn rebase動作します。

「git svn fetch -r XXX」を実行すると、XXX は最後のコミットで表示される最後の svn リビジョン ID であり、svn からいくつかのファイルを取得しますが、その後はgit svn rebaseハングして何も起こりません。

新しい変更を取り込み続けるために、Subversion トランクを再指定する手順を探しています。SVN にコミットするつもりはまったくありません。

何か案は?

私のenvセットアップ:
git-svnバージョン1.7.9.5(svn 1.6.17)
gitバージョン1.7.9.5
on linux mint 13

4

2 に答える 2

2

machine2
git svn init --trunk=http://foo/project でSubversionからフェッチする準備はできましたか?
まだ。gitcommitとsvnリビジョンの関係のメタデータが必要です。svnリビジョンを持つ最後のコミットSHA1を見つけるgit showまたはgit log -1

そしてSHA1を.git/refs/remotes/trunk

echo <SHA1> > .git/refs/remotes/trunk

これで可能になりますgit svn fetch (gitは最初の試行で回転マップを再構築します(おそらく5分))。

上記は、svnから最新の更新をプルするために使用されるブランチgitリポジトリで私のために働きました。

于 2012-12-04T16:39:07.043 に答える
0

svn とリモートが同じコミットを指していることを認識できるように、ローカル リポジトリを設定できます。

実行時 (machine2 上)

git svn init --trunk=http://foo/project

svn は、指しているリポジトリが machine1 からプルしたものと同じであることを知りません。

これが事実であることを git svn に知らせるには、プレフィックスを使用できます。

git svn init --prefix=origin/ --trunk=http://foo/project

(ブランチを使用する場合は、末尾のスラッシュが重要です)

最初の init コマンドをすでに実行している場合は、.git/config ファイルを次のように編集して同じ結果を得ることができます。

[svn-remote "svn"]
    fetch = http://foo/project:refs/remotes/origin/trunk

トランクの前の起点に注意してください。ファイルを手動で編集したくない場合は、次を実行できます。

git config --replace svn-remote.svn.fetch http://foo/project:refs/remotes/origin/trunk

これにより、行が挿入されます。

これを行った後、実行できるようにgit svn fetchなり、git が rev マップを更新します。

于 2013-08-25T18:42:07.317 に答える