git - Creating remote tracking branches using bash one-liner doesn't behave the same as running the commands manually -
if run following command:
for r in $(git branch -r | grep -po "(?<=myremote/).*"); echo git branch --track $r myremote/$r; done i following output:
git branch --track foo myremote/foo git branch --track bar myremote/bar git branch --track baz myremote/baz if run these echoed commands individually, following output:
branch foo set track remote branch foo myremote. branch bar set track remote branch bar myremote. branch baz set track remote branch baz myremote. on other hand, if run following one-liner (simply removing "echo"):
for r in $(git branch -r | grep -po "(?<=myremote/).*"); git branch --track $r myremote/$r; done the branch creation fails following output:
fatal: 'foo' not valid branch name. fatal: 'bar' not valid branch name. fatal: 'baz' not valid branch name. why might happening, there different command that's being run? how can debug since?
update:
there appears invisible control characters flowing through unix pipe, when specify --color=never grep. if change regex (?<=myremote/)[\w]* problem solved. however, still don't understand erroneous control character coming from. if add echo $r | od -c output view raw data coming through pipe, it's clear there control characters there:
output original regex:
0000000 f o o 033 [ m \n 0000007 output new regex:
0000000 f o o \n 0000004 what character , did come since added --color=never option?
this worked fine me
git branch -r | awk '/myremote/{print $2}' fs=/ | while read q git branch --track $q myremote/$q done
Comments
Post a Comment