【问题标题】:How to git svn fetch only branches/tags with certain patterns?如何 git svn 仅获取具有某些模式的分支/标签?
【发布时间】:2011-10-18 10:17:20
【问题描述】:

我想使用 git-svn 查看 Boost 库,我只想查看从 1.35 版本开始的主干和标签,即 tags/release/Boost_1_35 及更高版本。我的配置如下所示:

[svn-remote "svn"]
    ignore-paths = ^tags/release/(?i:(?!boost)|[^/]*(?:beta|rc)|boost_(?:0|1_[1-2]|1_3[0-4]))[^/]*/
    url = https://svn.boost.org/svn/boost
    fetch = trunk:refs/remotes/svn/trunk
    tags = tags/release/*:refs/remotes/svn/tags/*

但是,git fetch 仍然会获取大量不相关的标签,例如 svn/tags/version_0-9-10 或 svn/tags/version_0-9-10@44215。我想知道指定忽略路径以实现此效果的正确方法是什么。

顺便说一句:我读过How do I fetch/clone only a few branches using git-svn?,但听起来不是一个可扩展的解决方案。

【问题讨论】:

  • My answer on a related question 可能也适用于您。
  • @MatrixFrog 谢谢。我认为它与我提到的非常相似,因为 boost 是一个非常大的存储库,所以它的可扩展性不太好。我还担心当新分支出现时,git 会再次遍历所有 svn 历史吗?如果是,那么它不太适用于 boost 存储库,因为使用 git 签出一个完整的 boost 存储库通常需要几天时间。
  • 是的,这很好。您可能想让它在一夜之间运行,如果有大量标签,可能不止一次。或者,可能有人已经完成了这项工作并将其发布在某个地方,因此您可以克隆他们的 git 存储库。事实上,谷歌“boost git”——似乎已经发生了。

标签: git git-svn git-branch


【解决方案1】:

我已经设法为某些分支这样做了,但是由于 svn 中的标签实际上是分支,所以应该是相同的:

在 git svn init 使用“-t 标签和 -b 分支”之后,我将 .git/config 编辑为:

[svn-remote "svn"]
        ... url, fetch and stuff ... 
        branches = branches/rel-2.1/*:refs/remotes/svn/branches/rel-2.1/*
        branches = branches/rel-2.2/*:refs/remotes/svn/branches/rel-2.2/*
        branches = branches/rel-2.3/*:refs/remotes/svn/branches/rel-2.3/*
        branches = branches/rel-2.4/*:refs/remotes/svn/branches/rel-2.4/*
        branches = branches/rel-2.5/*:refs/remotes/svn/branches/rel-2.5/*

我用一个简单的python代码生成了相关的行并复制到.git/config:

for x in range(1,6):
   print branches = "     branches/rel-2.{0}/*:refs/remotes/svn/branches/rel-2.{0}/*".format(x)

不像正则表达式那样可扩展,但这是我能找到的最好的。

【讨论】:

  • 根据上面它会获取所有分支什么是排除方式,因为我有超过 20 个分支要包含和 3 个要排除
猜你喜欢
  • 2012-10-19
  • 2010-12-25
  • 2012-01-08
  • 2014-09-01
  • 2014-12-22
  • 2020-01-20
  • 2012-02-14
  • 2020-12-30
  • 2013-11-29
相关资源
最近更新 更多