我现在在 git-svn 的 --ignore-paths 选项上挣扎了几个小时,试图从大型存储库中仅获取某些标签。
我想在 dev 处开始获取,看起来像
> svn ls http://192.168.0.2/svn/repo/corporation/dev
branches/
tags/
trunk/
完整标签集的存储库目录列表如下所示:
> svn ls http://192.168.0.2/svn/repo/corporation/dev/tags
Acme-4.x/
Acme-5.0/
Acme-5.1/
Acme-5.2/
Acme-5.3/
Acme-5.4/
Acme-5.5/
Acme-5.6/
Acme-5.7/
Acme-5.8/
Acme-5.9/
我想忽略 Acme-5.5 之前的所有标签。
我尝试这样初始化和获取:
> git svn init http://192.168.0.2/svn/repo/corporation/dev
> git config svn.authorsfile ../users.txt
> git svn fetch --ignore-paths="Acme-4.x|Acme-5.0|Acme-5.1|Acme-5.2|Acme-5.3|Acme-5.4"
不幸的是,我仍然看到 Acme-4.x 标记中发生提取。提取通过以下路径显示在控制台上:
A ACME4.4/source/database/mssql/components/functions/vssver.scc
我尝试了正则表达式的一系列变体,包括我想忽略的标签的完整路径,一两个小时后,它变成了彻底的正则表达式混乱和绝望。我已经为 git-svn-init 提供了 --ignore-paths 选项,但没有任何效果。
有人可以评论一下为什么正则表达式不抑制在ignores-regex.txt中指定的路径上的提取吗?
Thanks.
我今天遇到了同样的问题:我的正则表达式永远不会匹配......确保您知道目标路径实际上是什么样子。我对输入正则表达式的路径结构做出了错误的假设。
要了解路径是什么样的,让 git-svn 将每个路径输出到控制台当它测试它们时:
注意:为了以防万一,请先备份 git-svn 文件!
- 在文本编辑器中打开 git-svn 脚本。我的脚本是
<git-dir>/libexec/git-core/git-svn
.
- 找到
is_path_ignored
子程序。
- Add a
print
第一条之上的声明return
声明如下...
sub is_path_ignored {
my ($self, $path) = @_;
print STDERR "$path\n"; //<-- **ADD THIS LINE**
return 1 if in_dot_git($path);
return 1 if defined($self->{ignore_regex}) &&
$path =~ m!$self->{ignore_regex}!;
return 0 unless defined($_ignore_regex);
return 1 if $path =~ m!$_ignore_regex!o;
return 0;
}
Now use git-svn
再次与--ignore-paths
switch.
我意识到,而不是像这样的路径trunk/baz
它实际上是在使用bar/trunk/baz
所以而不是
--ignore-paths='^(?:trunk|branches|tags)/baz'
我需要使用
--ignore-paths='^bar/(?:trunk|branches|tags)/baz'
不要忘记删除print
git-svn 脚本中的语句。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)