【问题标题】:xargs and git log --grepxargs 和 git log --grep
【发布时间】:2012-08-07 22:06:35
【问题描述】:

我正在整理一个 bash 命令来从旧的 SVN 存储库中查找 Git 提交。这是我的全部命令:

$ svn log --xml --revision 323016 http://svn.php.net/repository | grep "<msg>" | sed 's/<msg>//' | xargs --verbose -i% git log --pretty=oneline --grep=\"%\"
git log --pretty=oneline --grep="Always restore PG(magic_quote_gpc) on request shutdown"

运行命令的前几部分会给我提交注释:

$ svn log --xml --revision 323016 http://svn.php.net/repository | grep "<msg>" | sed 's/<msg>//'
Always restore PG(magic_quote_gpc) on request shutdown

所以效果很好 - 但是当我想通过 xargs 使用 git log --grep 时,它不起作用(不给我任何响应)。

这是奇怪的部分...--verbose 为我打印出命令。如果我复制并粘贴那个确切的命令,我会得到我需要的输出。那就是:

$ git log --pretty=oneline --grep="Always restore PG(magic_quote_gpc) on request shutdown"
87c038be06b8b0eb721270f98c858fd701f5d54b Always restore PG(magic_quote_gpc) on request shutdown

此外,由于某种原因,这不起作用:

$ echo -n "Always restore PG(magic_quote_gpc) on request shutdown" | xargs --verbose -i% git log --grep=\"%\"
git log --grep="Always restore PG(magic_quote_gpc) on request shutdown"

所以这一定是我对 xargs 的使用,对吧?

【问题讨论】:

    标签: git xargs


    【解决方案1】:

    我会将您通过 xargs 执行的命令包装到 sh 中

    git rev-parse HEAD | xargs -n 1 -i{} sh -e "git log -1 {}"
    

    我已经使用它来解决一些转义问题以及为 xargs 传递的每个项目执行复杂的脚本:

    git rev-parse HEAD | xargs -n 1 -i{} sh -e "some crazy looped code with {} embedded in multple places"
    

    【讨论】:

      【解决方案2】:

      问题是您正在转义引号。我不知道为什么这是个问题,但我试过了,问题肯定出在转义引号上。不知何故,当 xargs 调用该命令时,它会将这些引号作为参数的一部分,因此您不是搜索Always restore PG(magic_quote_gpc) on request shutdown,而是搜索"Always restore PG(magic_quote_gpc) on request shutdown"。以下内容应该适合您:

      svn log --xml --revision 323016 http://svn.php.net/repository | grep "<msg>" | sed 's/<msg>//' | xargs --verbose -i% git log --pretty=oneline --grep="%"
      

      【讨论】:

        猜你喜欢
        • 2012-04-05
        • 2022-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-18
        • 2020-07-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多