当我执行
时
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 <sltin@44b83e5a-25ef-0310-8dbe-ee0aa4f92a64>
Date: Wed Jun 22 14:30:53 2011 +0000
Fixing the classpath.
git-svn-id: http://example.com/trunk/client-resources/resource-common@12406 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
答案 0 :(得分:30)
git svn fetch
只复制本地对象数据库的新修订版,非常类似于git fetch
- 两者都只同步对象数据库。它不会更新您的分支和工作副本。要将新获取的更改添加到分支中,请使用git svn rebase
;它将在最新的svn版本之上重新应用所有本地更改。
git svn rebase
将执行快进,因此不应该破坏历史记录。或者,您可以使用git merge --ff-only git-svn
快进到最新的svn修订版(并且当它不可快速转发时中止,即不是直接后代)
当上游svn更改了历史记录(svndump / svnadmin)并且您需要重新获取新提交时,您应该只使用git svn reset
,但这几乎不会发生(否则会责怪管理员!)
答案 1 :(得分:7)
我找到了答案,svn数据被加载到一个非活动线程中,该线程通常会合并到活动分支中,而裸存储库中不存在该活动分支。我试图重置,但这也需要一个活动的分支。最后的答案是:
git reset --soft refs/remotes/git-svn
答案 2 :(得分:4)
我相信你想要git svn rebase
。这与git pull
不同,但相似之处在于它们都包含两个步骤(从远程获取然后重新绑定或合并)。
您也可以仅修改已经提取的提交:
git svn rebase --local
如果您的本地提交尚未在SVN中,git-svn将在最新的SVN提交之上重播(重新绑定)它们。
答案 3 :(得分:0)
2018年的最新git也有同样的问题。已删除.rev_map
和index
文件并重新运行git svn fetch
。
/.git/svn/refs/remotes/origin/trunk/.rev_map.<GUID>
/.git/svn/refs/remotes/origin/trunk/index
不知怎的,它一直停留在缓存中不正确的最后一个svn修订关联。在我的情况下,它是r32修订版,实际上是r31版本(因为r32和r31有明显不同的提交消息,这就是我检测到的方式)并且它已经显示r32修订版与r31修订版的提交消息。
<强>注意:强>
又遇到了另一个问题。我的案例中的git pull origin trunk:master
已经在重新索引之前恢复了更改。所以不要拉。在rebase
之前设置push
和pull
以传播对远程存储库的固定更改。