3

以下の svn ブランチが .git/config ファイルに追加されました。

[svn-remote "svnb02"]
        URL = https://svn/repos/Project/branches/b02
        フェッチ = :refs/remotes/git-svn-b02
[svn-remote "svnb03"]
        URL = https://svn/repos/Project/branches/b03
        フェッチ = :refs/remotes/git-svn-b03

ただし、以下のコマンドを使用してフェッチできるのは「svnb03」のみです。

git svn fetch -R svnb03 -r HEAD

「svnb02」の場合、以下のコマンドは何もフェッチせずに静かに戻ります。

git svn fetch -R svnb02 -r HEAD

どんなコメドも大歓迎です。

4

4 に答える 4

3

git svn clone も、Subversion リポジトリにトランク、ブランチ、およびタグが最上位にある標準レイアウトがない場合、サイレントに失敗します。その場合は、レポを再構築すると git svn clone が機能するはずです。

于 2012-05-14T19:40:49.487 に答える
2

ブランチHEADが設定されていない可能性があります。を見てください.git/remotes/svnb02/HEAD。それが欠落しているか、最新でない場合は、それが問題の原因である可能性があります。

Gitには、この状況でHEADを見つけるためのコードがありますが、明らかにgit svnそうではありません。これに関する作品に はパッチがあります。

それでよければ、設定ファイルのsvn.または変数への奇妙なエントリ、またはディレクトリの奇妙なエントリを探します。remote.svn..git/remotes

これはすべて当て推量です。奇妙な状況には通常、奇妙な説明があります。幸運を。

編集-私はsvnb02あなたがこの問題を抱えていたときにそれが新しい改訂を持っていたと思います。フェッチされていないリビジョンがある場合にのみ、コマンドはsvnからフェッチします。

于 2009-02-19T20:54:51.700 に答える
2

これは、要求されたリビジョン (HEAD) がトランクにない場合に発生します。私たちのビルド スクリプトは、ビルドが成功した後に自動的にソースにタグを付けるので、私の場合、最後の svn リビジョンがトランクを指すことはめったにないので、これはよくあります。次のスクリプトは、トランクの最後に変更されたリビジョンを取得し、フェッチを実行するときにそれを使用します。


#! /bin/sh
URL=$1
# git-svn fails to pull files if specified revision is not in path specified
# so find the last changed revision and use that
REV=$(svn info ${URL}trunk | grep "Last Changed Rev:" | awk '{print $NF}')
[ -n "$REV" ] || {
  echo "Revision not found. Check URL"
  exit 1
}
git svn init "$URL" -s --prefix svn/
git svn fetch -r $REV
于 2009-12-08T17:15:55.827 に答える
1

私は新しいユーザーなので、返信にハイパーリンクを 1 つしか含めることができないことに注意してください。BASE を「https://svn/repos/Project」とします。

私の答えは、この問題の直接の原因ではありませんが、密接に関連しており、ほぼ確実に要因となっています。

この問題は、SVN ブランチを git トランクとして扱っていることに関連しています。新しいバージョンの git (1.6+) では、ブランチやタグを git トランクとしてチェックアウトできないことがわかりました。Git は標準的なレイアウトを想定しています。あなたの場合、おそらく想定しています。

トランク - {BASE}/trunk/ ブランチ - {BASE}/branches/ タグ - {BASE}/tags/

b02 と b03 はブランチの子であるため、トランクではなくブランチであると見なされます。1.5.x の後半のバージョンでは動作があまり一貫していないことがわかりましたが、1.6.x のバージョン (特にそれ以降の 1.6.x のバージョン) では、動作はかなり再現可能です。

私にとって非常にうまくいった回避策は、タグとブランチの URL を明示的に宣言することです。

git svn init -T {BASE}/branches/b03 -b {BASE}/anydir -t {BASE}/tags git svn fetch -r33666 # 33666 が最新バージョンです。

その後、git svn rebase の使用をお勧めします。

于 2009-08-04T11:32:20.487 に答える