如何使用管道命令进行Git克隆

3

我正在尝试改进我的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上进行测试。

有人知道这个命令错在哪里吗?

非常感谢您提前的帮助。


你是从来没有得到过什么,还是只是不能实时地得到它,最终才会得到全部? - Mort
3个回答

1
我通过使用解决了它。
git clone --progress --branch $TAG_VERSION https://github.com/$REPO ./ 2>&1 | tr '\u000D' '\n'"

0
你可以使用这个:
git clone --progress url > clone.txt 2>&1

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

enter image description here


0

你的命令对我有效。它输出类似于“- 克隆到repo...远程...”。我猜你的系统无法捕获输出,可能是因为输出缓冲。

尝试在每条记录后打开刷新(将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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接