gpt4 book ai didi

regex - git-svn clone 忽略文件夹的路径正则表达式

转载 作者:太空狗 更新时间:2023-10-29 12:51:06 27 4
gpt4 key购买 nike

我正在尝试进行 git-svn 克隆以将 SVN 中的所有文件导入到 GIT。给出的命令是这样的;

git svn clone --stdlayout --ignore-paths='(/cache|/tmps|/file/conf/setting.xml)' --authors-file=../authors.txt file:///svnFolder/local-repos/PRG PRG.git

上面的克隆但问题是它忽略了所有具有缓存和 tmps 的文件和文件夹。例如,它甚至会忽略这些
new/folder/cache
meta/files/sets/tmps.html

任何人都可以帮我设置正则表达式以在忽略路径中给出忽略根文件夹的缓存和 tmps 目录中的文件和子目录。

最佳答案

您的忽略路径正则表达式太笼统了。提供的正则表达式在完整路径上运行。例如,如果您的存储库布局是:

svn_root/path/to/your_project

然后有一个标准的主干、分支和标签布局,一组被评估的示例路径线可能是:
svn_root/path/to/your_project/trunk/new/folder/cache
svn_root/path/to/your_project/trunk/meta/files/sets/tmps.html
svn_root/path/to/your_project/trunk/file/conf/setting.xml
svn_root/path/to/your_project/trunk/cache/...
svn_root/path/to/your_project/trunk/tmps/...

让我们首先分析您作为 ignore-paths 参数的一部分提供的正则表达式:
'(/cache|/tmps|/file/conf/setting.xml)'
  • 周围的括号表示 should be capturing 内的表达式.
  • 管道,或 alternation , 表示从几个可能的表达式中计算目标字符串上的每个表达式
  • 每个表达式都非常简单,但让我们分析每个:
  • /缓存
  • 查找文字字符“/”
  • 查找文字字符“c”
  • 查找文字字符“a”
  • 查找文字字符“c”
  • 查找文字字符“h”
  • 查找文字字符“e”
  • /tmps
  • 查找文字字符“/”
  • 查找文字字符“t”
  • 查找文字字符“m”
  • 查找文字字符“p”
  • 查找文字字符“s”
  • /file/conf/setting.xml
  • 查找文字字符“/”
  • 查找文字字符“f”
  • 查找文字字符“i”
  • 查找文字字符“l”
  • 查找文字字符“e”
  • 查找文字字符“/”
  • 查找文字字符“c”
  • 查找文字字符“o”
  • 查找文字字符“n”
  • 查找文字字符“f”
  • 查找文字字符“/”
  • 查找文字字符“s”
  • 查找文字字符“e”
  • 查找文字字符“t”
  • 查找文字字符“t”
  • 查找文字字符“i”
  • 查找文字字符“n”
  • 查找文字字符“g”
  • 匹配(几乎)任何字符
  • 查找文字字符“x”
  • 查找文字字符“m”
  • 查找文字字符“l”

  • 分析您的正则表达式后,让我们通过您的表达式浏览上面给出的示例路径:

    要评估的字符串:
    svn_root/path/to/your_project/trunk/new/folder/cache
  • 循环遍历每个字符以查找文字“/”,然后是“c”等......直到找到与您的第一个子表达式“/cache”的完整匹配。该路径被忽略。

  • 要评估的字符串:
    svn_root/path/to/your_project/trunk/meta/files/sets/tmps.html
  • 循环遍历每个字符,查找文字“/”,后跟“c”等...未找到匹配项
  • 循环遍历每个字符以查找文字“/”,然后是“t”等,直到找到与您的第二个子表达式“/tmps”完全匹配的匹配项。该路径被忽略。

  • 要评估的字符串:
    svn_root/path/to/your_project/trunk/file/conf/setting.xml
  • 循环遍历每个字符并针对第一个子表达式进行评估。未找到匹配项
  • 循环遍历每个字符并针对第二个子表达式进行评估。未找到匹配项
  • 循环遍历每个字符并针对最后一个子表达式进行评估。找到匹配。此路径被忽略

  • 从这里,你大概可以看到为什么下面两个也被忽略了。子表达式之一匹配每个路径的一部分:
    svn_root/path/to/your_project/trunk/cache/...
    svn_root/path/to/your_project/trunk/tmps/...

    有几种方法可以解决这个问题,但是如果您只想忽略主干中的几个特定目录,您可以按如下方式修改您的表达式:
    '(trunk/cache|trunk/tmps|/file/conf/setting\.xml)'

    这实际上取决于您想要做什么,您想要忽略哪些特定路径。如果您需要更多帮助,请详细说明您的存储库的布局方式以及要忽略的目录。

    关于regex - git-svn clone 忽略文件夹的路径正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15502284/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com