2016-05-08 1 views
3

J'essaie d'améliorer mon outil CI et pour ce faire, j'essaye de capturer la sortie de la commande git clone, et cela me rend fou.Comment canaliser git clone

Afin de simplifier le scénario, je réduis le problème à cette commande simple:

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

Avec 2>&1 je rediriger stderr (utilisation par git à la sortie des progrès) au stdout, je J'essaie de canaliser cela à xargs echo -. Dans mon scénario de la vie réelle xargs echo sera remplacé par quelque chose d'autre. J'utilise --progress afin de forcer git à être bavard même s'il n'est pas attaché à une vraie console.

Mon résultat attendu serait:

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

Ma sortie est la place absolument rien. Je suis en train de tester ceci sur OSX 10.11.

Est-ce que quelqu'un sait ce qui ne va pas avec cette commande?

Merci beaucoup beaucoup à l'avance.

+0

Avez-vous jamais rien, ou ne vous tout simplement pas l'obtenir en temps réel, est-ce que tous viennent à la fin? – Mort

Répondre

1

Je l'ai résolu en utilisant

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

Votre commande fonctionne pour moi. Il sort quelque chose comme "- Clonage dans repo ... remote ...". Je suppose que votre système ne parvient pas à capturer la sortie en raison de la mise en mémoire tampon de sortie. Essayez d'activer le vidage après chaque enregistrement (réglez la variable d'environnement GIT_FLUSH sur 1). En outre, pour désactiver le tampon git clone commande:

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) 
0

Vous pouvez utiliser ceci:

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

L'astuce est d'ajouter le 2>&1 que les derniers arguments de la commande.
Il imprime toutes les commandes telles qu'elles auraient été imprimées sur le terminal, mais elles sont maintenant écrites dans le fichier désiré.

enter image description here