【问题标题】:How to pipe git clone如何管道 git clone
【发布时间】:2016-09-03 06:54:08
【问题描述】:

我正在尝试改进我的 CI 工具,为此我正在尝试捕获 git clone 命令的输出,这让我发疯了。

为了简化场景,我将问题简化为这个简单的命令:

git clone --progress https://github.com/$REPO.git $FOLDER 2>&1 | xargs echo  -

使用2>&1,我将stderr(由git 用于输出进度)重定向到stdout,然后我试图将其通过管道传送到xargs echo -。在我的现实生活场景中,xargs echo 将被其他东西取代。

我正在使用 --progress 来强制 git 变得冗长,即使它没有连接到真正的控制台。

我的预期输出是:

- Cloning into 'a3'...
- remote: Counting objects: 54130, done.
- remote: Compressing objects: 100% (520/520), done.

我的输出完全没有。 我正在 OSX 10.11 上对此进行测试。

有人知道那个命令有什么问题吗?

提前非常感谢

【问题讨论】:

  • 你永远得不到任何东西,或者你只是没有实时得到它,是不是一切都到了最后?

标签: git bash unix pipe posix


【解决方案1】:

我通过使用解决了它

git clone --progress --branch $TAG_VERSION https://github.com/$REPO ./ 2>&1 | tr '\u000D' '\n'"

【讨论】:

    【解决方案2】:

    你的命令对我有用。它输出类似“- 克隆到 repo ... remote ...”的内容。我猜您的系统由于输出缓冲而无法捕获输出。

    尝试在每条记录后打开刷新(将GIT_FLUSH环境变量设置为1)。另外,关闭git clone 命令的缓冲:

    repo='your-repo-uri'
    
    while read -r l; do
      echo "<<<<<<<<<<"
      echo "$l"
      echo ">>>>>>>>>>"
    done < <(GIT_FLUSH=1 stdbuf -i0 -o0 -e0 git clone --progress "$repo" 2>&1)
    

    【讨论】:

      【解决方案3】:

      你可以用这个:

      git clone --progress url > clone.txt 2>&1
      

      诀窍是将2&gt;&amp;1 添加为命令的最后一个参数。
      它将打印出所有命令,就像它们本来会打印到终端一样,但现在它们被写入所需的文件。

      【讨论】:

        猜你喜欢
        • 2011-08-25
        • 2021-06-15
        • 2015-04-08
        • 2020-10-05
        • 1970-01-01
        • 1970-01-01
        • 2011-09-03
        • 1970-01-01
        • 2022-10-07
        相关资源
        最近更新 更多