Si ejecuto el siguiente command:
for r in $(git branch -r | grep -Po "(?<=myremote/).*"); do echo git branch --track $r myremote/$r; done
Obtengo el siguiente resultado:
git branch --track foo myremote/foo git branch --track bar myremote/bar git branch --track baz myremote/baz
Si ejecuto estos commands repetidos individualmente, obtengo el siguiente resultado:
Branch foo set up to track remote branch foo from myremote. Branch bar set up to track remote branch bar from myremote. Branch baz set up to track remote branch baz from myremote.
Por otro lado, si ejecuto el siguiente one-liner (simplemente eliminando "echo"):
for r in $(git branch -r | grep -Po "(?<=myremote/).*"); do git branch --track $r myremote/$r; done
La creación de la twig falla con el siguiente resultado:
fatal: 'foo' is not a valid branch name. fatal: 'bar' is not a valid branch name. fatal: 'baz' is not a valid branch name.
¿Por qué podría estar pasando esto? ¿Hay algo diferente sobre el command que se está ejecutando? ¿Cómo puedo depurar esto desde entonces?
ACTUALIZAR:
Parece que hay algunos caracteres de control invisibles que fluyen a través de la tubería Unix, incluso cuando especifico --color=never
for grep
. Si cambio la expresión regular a (?<=myremote/)[\w]*
el problema está resuelto. Sin embargo, todavía no entiendo de dónde viene el carácter de control erróneo. Si agrego echo $r | od -c
echo $r | od -c
a la salida para ver los datos brutos que llegan a través de la tubería, está claro que hay caracteres de control adicionales allí:
Salida con regex original:
0000000 foo 033 [ m \n 0000007
Salida con nueva expresión regular:
0000000 foo \n 0000004
¿Cuál es el carácter adicional y de dónde vino desde que agregué la opción --color=never
?
Esto funcionó bien para mí
git branch -r | awk '/myremote/{print $2}' FS=/ | while read q do git branch --track $q myremote/$q done