2011-08-25 97 views
16

最新的版本是不拉當我從資料庫執行混帳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

git倉庫我將數據拉入裸倉庫,只會讀取(no dcommits),所以它甚至不會允許rebase。 – 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不同,但類似之處在於兩者都涉及兩個步驟(從遠程獲取然後重新分配或合併)。

您也可以變基只取已提交:

git svn rebase --local 

如果您有本地提交那些尚未SVN,混帳SVN將重播(衍合)他們的最新的SVN提交頂部。

23

git svn fetch僅將新修訂版複製到您的本地對象數據庫,非常類似於git fetch - 兩者僅同步對象數據庫。它不會更新你的分支和工作副本。要將新提取的更改導入分支,請使用git svn rebase;它會在最新的svn修訂版之上重新應用所有本地更改。

git svn rebase會在沒有本地提交時做快進,所以不應該混淆歷史。另外,您可以使用git merge --ff-only git-svn快進到最新的SVN版本(並中止時,它不是快速轉發,即不是直系後代)

,才應使用git svn reset當上遊SVN已經改變了歷史(svndump/svnadmin),你需要重新提交新的提交,但這應該幾乎不會發生(否則怪管理員!)