我在本地计算机上使用git svn
与SVN仓库同步。
最近,我团队中的某个人在SVN仓库中添加了一些实验性内容(他试图添加一些标签),并在下次提交时将其删除。在此之后,我的git svn拒绝获取。它只是达到某一点而停留在那里。
无论如何,我不想将所有实验内容都提取到我的本地机器中。所以,我想在SVN存储库中忽略某些提交。这可能是git svn
吗?
答案 0 :(得分:12)
假设提交666
是我们需要跳过的。诀窍是让git
获取除666 之外的所有提交。值得庆幸的是,git-svn为我们提供了-r
参数。
首先,在提交被跳过之前立即更新提交:
git svn fetch -r BASE:665
然后,在Subversion提示错误提交后更新所有内容:
git svn fetch -r 667:HEAD
这应该为您提供一个存储库,其中包含您希望跳过的提交之外的所有内容。如有必要,您可以跳过多个修订版,只需重复上述命令即可确定您希望保留的任何提交范围。
如果您跳过将受以后修订影响的文件更改(例如,您跳过文件更改或创建,并且该文件稍后会在您提取的修订版中更改),则跳过修订可能会出错。
那就是说,我刚刚完成了跳过修订,其中有人将整个Subversion存储库复制到tags/
目录中,然后删除了明显无效的标记。我使用上面的技巧来跳过创建无效标记的修订版(Git一直试图下载整个存储库),让它获取删除(它只是忽略它),而且一切都是正确的。
答案 1 :(得分:3)
您可以尝试在实验提交和重新获取之前重置git-svn。
git svn reset -r665
git svn fetch
如果问题仍然存在并且似乎是永久性的(可能是某些文件访问修改),您可以尝试其他方式。
首先重置为邪恶之前的最后一次提交
git svn reset -r665
然后尝试重新获取完全忽略开发人员在邪恶提交中触及的所有文件
git svn fetch --ignore-paths='/path/to/problematic/files'
然后在恢复恶意提交之后重置为第一次正常提交。
git svn reset -r668
再次重新获取所有内容。
git svn fetch
我建议r666是邪恶的提交,r667是还原它的那个。
答案 2 :(得分:0)
我有同样的问题,发现我必须继续重新运行fetch。但后来我发现其他的,挂在后台运行的git svn fetch操作。杀死这些似乎解决了问题
答案 3 :(得分:-2)
您可以再次克隆存储库并使用depth参数指定年龄...
git clone --depth 3 // Gets the last 3 revisions