使用“git svn”,我可以在获取时忽略特定的Git提交吗?

时间:2011-09-15 12:16:37

标签: git git-svn

我在本地计算机上使用git svn与SVN仓库同步。

最近,我团队中的某个人在SVN仓库中添加了一些实验性内容(他试图添加一些标签),并在下次提交时将其删除。在此之后,我的git svn拒绝获取。它只是达到某一点而停留在那里。

无论如何,我不想将所有实验内容都提取到我的本地机器中。所以,我想在SVN存储库中忽略某些提交。这可能是git svn吗?

4 个答案:

答案 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
相关问题