git-svn --ignore-paths

标签 git

我现在用 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 中指定的路径上的提取。

谢谢。

最佳答案

我今天遇到了同样的问题:我的正则表达式永远不会匹配... 确保您知道目标路径实际是什么样的。我对输入正则表达式的路径结构做出了错误的假设。

要找出路径的样子,让 git-svn 在测试它们时将每个路径输出到控制台:

注意:以防万一,请先备份 git-svn 文件!

  1. 在文本编辑器中打开 git-svn 脚本。我的脚本是 <git-dir>/libexec/git-core/git-svn .
  2. 找到 is_path_ignored子程序。
  3. 添加 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;
}

现在使用 git-svn再次使用 --ignore-paths开关。

我意识到,而不是像 trunk/baz 这样的路径它实际上是在使用 bar/trunk/baz

所以代替

--ignore-paths='^(?:trunk|branches|tags)/baz' 

我需要使用

--ignore-paths='^bar/(?:trunk|branches|tags)/baz'

不要忘记删除 print来自 git-svn 脚本的语句。

关于git-svn --ignore-paths,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7668752/

相关文章:

Git:如何将一个提交融化为另一个提交?

git - 如何处理依赖于另一个未 merge 功能分支的功能分支?

git - 为什么这里使用 git reset 而不是 git merge?

git 树包含重复的文件条目

java - Intellij 不询问 Git 凭据,但在身份验证过程中失败

git - 删除名为 "~"的文件并从 git 取消暂存

Git:用链接的工作树交换主工作树?

git - 将 Gitflow 与 pull 请求一起使用的正确方法

Git:无法理解为什么分支(主题)提交/merge 发生在主分支上

git stash,jenkins 管道,没有使用存储库的 git 作业