2012-03-06 36 views
34

git svn cloneを実行すると、多くの場合、それに続くgit svn fetch操作中に、私は、フォルダの数のために、このメッセージが表示されます:git-svn「revmapが見つかりませんでした」 - それはどういう意味ですか?

Couldn't find revmap for <SVN folder URL> 

マイリポジトリが正常に動作するです。このメッセージはどういう意味ですか?私はそれについて心配すべきでしょうか?

+4

b389fe ...)。エラーが何を意味するのか分かりませんが、私はそれをかなり定期的に見ていますが、それは良性のようです。 –

+0

これは、リビジョンの履歴が保持されない可能性があることを意味します。 – bancer

答えて

32

完全な回答はありませんが、このエラーはgit-svn.perlによって生成されています。 (関連するコードパスはdo_fetch - > make_log_entry - > find_extra_svn_parents - > lookup_svn_mergeのようです)。そのコードは、svn merge commitのsvn:mergeinfoプロパティを見て、親のコミット/ブランチをすべて調べようとしているようですこれをgitクローンの中で素敵な、複数の親のマージコミットに変換します。その親の解決が失敗した場合、あなたのコミットはまだgitに取り込まれます。そうでなければ同じ親情報を持たないだけです。

これまで私は、私の現在の主な使用事例でこのエラーに起因する大きな問題を発見していませんでした。これはsvn repoをgitに変換しています。 git-svnは実際に私にとって重要な大きなマージを解決することができましたが、これまでのところ、これらのエラーは、個々のチェリーピックマージやそれ以上気にしない古いブランチに限られているようです。

実際には、私の場合、これらのエラーのほとんどは、私がsvnで間違ったレベルであると解釈するところでsvn:mergeinfoが記録されたコミットに由来しています。 svnリポジトリでは、通常、ブランチルートにsvn:mergeinfoを記録しようとします。 svn/trunkでは、特定のブランチサブディレクトリに添付されているmergeinfoに関係するように見える場合があります。 svn/trunk/dir1にあります。私はsvnのエキスパートではありませんが、現在のヒューリスティックは、ブランチルートにないsvn:mergeinfosがたくさんある場合、svn repoまたはマージプロセスで何か問題がある可能性があります。そうなら、gitが不平を言うことは分かります。私自身のケースでは、これらの「奇妙な」コミットの大半は、ブランチルート(例:svn/trunk)の両方でsvn:mergeinfoをサブディレクトリレベル(例:svn/trunk/dir1)でに変更します。 gitはrootレベルから必要なものを集め、subdirレベルについては明らかに無害なエラーをスローします。

しかし、おそらく特に恐らくrebasing in a git-svn repo where not all the branches were checked outの場合、一部の人々が問題を報告しているようです。

2

ちょうど注意したかった - のgit - SVNで隠しファイルが実際に存在し、クロージングidはリポジトリUUIDまたはgit-svn-idある

.git/svn/refs/remotes/git-svn/.rev_map.00088888-caaa-4444-9999-2222eeeeeee4 

のようなものを...と呼ばれます。

これはバイナリファイルであり、かつ/usr/lib/git-core/git-svnでそれをもう少しあります:

# rev_map: ... 
# This is the replacement for the rev_db format, which was too big 
# and inefficient for large repositories with a lot of sparse history 
# (mainly tags) 
# 
# The format is this: 
# - 24 bytes for every record, 
#  * 4 bytes for the integer representing an SVN revision number 
#  * 20 bytes representing the sha1 of a git commit 
... 
# - Piping the file to xxd -c24 is a good way of dumping it for 
#  viewing or editing (piped back through xxd -r), should the need 
#  ever arise. 

出力は次のようになりますことをご注意:

$ cat .git/svn/refs/remotes/git-svn/.rev_map.* | xxd -c24 | head -1 
0000000: 0000 0001 33ee 22cc 9933 88aa 44ff 22dd 5566 88ee 66aa bbcc ....5.'..?..J...Zj..`... 

私はあなたがgit svn infoを入力するときだと思いますこれはコンサルティングのためのgit SHAハッシュに基づくSVNリビジョン番号を得るために、このファイルです。 rev30はSubversionコミットリビジョン番号(r123)とGitコミットハッシュ(git commitハッシュ)の間のマッピングです(例:git svn resetはこのファイルからエントリを消去するのに役立ちますが、これは100%ではありません)。

関連する問題