如何管道 git 克隆

How to pipe git clone

我正在尝试改进我的 CI 工具,为此我正在尝试捕获 git 克隆命令的输出,这让我抓狂。

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

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

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

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

我的预期输出是:

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

我的输出完全没有。 我正在 OSX 10.11.

上测试这个

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

提前非常感谢

你的命令对我有用。它输出类似“- 克隆到 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)

你可以使用这个:

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

诀窍是添加 2>&1 作为命令的最后一个参数。
它将打印出所有命令,因为它们将被打印到终端,但现在它们被写入了所需的文件。

我用

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