2011-08-25 12 views
16

git-svnのフェッチが最新バージョンを引き出していない

私​​のリポジトリから

git svn fetch

を実行すると、何も返されず、svnの下に新しいコミット があっても更新されません。

[root]# svn log -l 1 http://example.com/trunk/client-resources/resource-pa 
    r12958 | ing | 2011-08-22 18:29:57 -0500 (Mon, 22 Aug 2011) | 1 line 
    SRGENERAL-1468 adding more arrays for pa 
[root]# git-svn fetch 
[root]# git log -1 
    commit be19ae4c7d1a3c3da6dd90389aebd6d76792cc71 
    Author: sltin <[email protected]> 
    Date: Wed Jun 22 14:30:53 2011 +0000 

    Fixing the classpath. 

    git-svn-id: http://example.com/trunk/client-resources/[email protected] 44b83e5a-25ef-0310-8dbe-ee0aa4f92a64 

バージョンの違いに注意してください。 svnログは12958をリストし、gitログは最新の svnバージョンを12406としてリストします。

12406にリセットしてから新しいフェッチを実行できます:

[root]# git svn reset 12406 
    r12406 = be19ae4c7d1a3c3da6dd90389aebd6d76792cc71 (refs/remotes/git-svn) 
[root]# git svn fetch 
     M  src/test/java/csl/resource/ioc/AbstractResourceIocTest.java 
    r12977 = 1b21f560b0354b28fe1a272d7723b1e6fa90a99c (refs/remotes/git-svn) 
     M  src/test/java/csl/resource/ioc/AbstractResourceIocTest.java 
    r12978 = bf22ea0151a364eb1ca1af37a7a907d5b5cc7420 (refs/remotes/git-svn) 
     M  src/test/java/csl/resource/ioc/AbstractResourceIocTest.java 
    r12987 = ce922c2eae07f6c12dbbd4175a9c61055b563ee3 (refs/remotes/git-svn) 

ログのバージョンを確認すると、彼らは変わらない。

git-svnを使ってsvnから最新バージョンを取得するにはどうすればよいですか?

私は答えを見つけました。svnデータは、通常はブランチリポジトリに存在しないアクティブなブランチにマージされる非アクティブなスレッドにロードされます。私はリセットをしようとしましたが、それもアクティブなブランチが必要です。最終的な答えは:

git reset --soft refs/remotes/git-svn 
+1

私は今まで(なしdcommits)から読み込まれてしまいますので、それもリベースを許可しませんベアリポジトリ内のデータを引っ張っていますgitリポジトリ。 – Starkii

+0

さらに、 "git svn log -1"は正しいバージョンを返しますが、 "git log -1"は更新されず、更新されたバージョンはリポジトリにありません。 – Starkii

+0

Starkii: 'git-svn'と' git'を区別する必要があります。 'git log'は現在のgit commit(' HEAD')からの情報を表示し、 'git svn log'はsvnメタデータから得られた情報を使用し、HEAD-svnコミットから必ずしも到達できないログを表示します。 – knittl

答えて

6

答えが見つかると、svnデータは通常はマージされる非アクティブなスレッドに読み込まれます裸のリポジトリに存在しないアクティブなブランチに移動します。私はリセットをしようとしましたが、それもアクティブなブランチが必要です。最終的な答えは:

git reset --soft refs/remotes/git-svn 
+0

愚かな質問が、あなたはgit svnフェッチ後、またはその前に行うのですか? –

4

私はあなたがgit svn rebaseをしたいと考えています。これはgit pullとは異なりますが、どちらも2つのステップ(リモートからフェッチしてからリベースまたはマージ)を実行するという点で似ています。

また、すでにフェッチされたコミットをリベースすることができます

git svn rebase --local 

あなたはSVNではまだありませんローカルコミットをしていた場合は、のgit - SVNはSVNのコミット最新の上にそれらを再生(リベース)します。

23

git svn fetchはローカルデータベースに新しいリビジョンをコピーします。git fetchと非常によく似ていますが、両方ともオブジェクトデータベースのみを同期します。ブランチと作業コピーは更新されません。新しく取得した変更をブランチに適用するには、git svn rebaseを使用します。最新のsvnリビジョンの上にあなたのすべてのローカル変更を再適用します。

git svn rebaseは、ローカルコミットがないときに早送りを行うため、履歴を混乱させるべきではありません。別の方法としては、最新のSVNのリビジョンに早送り(と、それは高速転送可能でない場合中止、すなわちない直系の子孫)するgit merge --ff-only git-svnを使用することができ

上流のsvnは、歴史(svndumpを/変更されたときにのみgit svn resetを使用する必要がありますsvnadmin)、新しいコミットを再フェッチする必要がありますが、これはほとんど起こりません(そうでなければ管理者を責める)。

関連する問題