Как правильно использовать псевдоним этой команды git line-counting в gitconfig? - PullRequest
0 голосов
/ 27 июня 2018

Я нашел эту команду в Переполнении стека, чтобы подсчитать вклады LOC каждого пользователя в репо:

git log --no-merges --pretty=format:%an --numstat | awk '/./ && !author { author = $0; next } author { ins[author] += $1; del[author] += $2 } /^$/ { author = ""; next } END { for (a in ins) { printf "%10d %10d %10d %s\n", ins[a] - del[a], ins[a], del[a], a } }' | sort -rn

Однако, когда я пытаюсь использовать псевдоним в качестве команды в моем .gitconfig, я получаю всевозможные ошибки. Я понятия не имею, как правильно избежать этого, чтобы он правильно работал в моем bash, когда я вызываю «git count-lines». Я сделал несколько попыток, основываясь на других вопросах о StackOverflow, описывающих псевдонимы git, но у меня продолжают появляться различные проблемы.

Я уже пробовал кучу вещей в моем gitconfig. Этот дает мне наименьшее количество ошибок:

[alias]
    count-lines = "!f() { git log --no-merges --pretty=format:%an --numstat | awk '/./ && !author { author = $0; next } author { ins[author] += $1; del[author] += $2 } /^$/ { author = \"\"; next } END { for (a in ins) { printf \"%10d %10d %10d %s\n\", ins[a] - del[a], ins[a], del[a], a } }' | sort -rn; }; f"

Это ошибка, которую выдает выше:

awk: cmd. line:1: /./ && ... printf "%10d %10d %10d %s
awk: cmd. line:1:                   ^ unterminated string  
awk: cmd. line:1: /./ && ... printf "%10d %10d %10d %s 
awk: cmd. line:1:                   ^ syntax error

(насколько я понимаю, я на компьютере с Windows 7, поэтому мне нужно использовать кавычки вокруг всей команды)

1 Ответ

0 голосов
/ 28 июня 2018

Хорошо, я наконец-то выяснил проблему после полутора часов отладки и перебора: мне нужно убрать обратную косую черту в символе новой строки, который находится в операторе printf.

broken: count-lines = "!f() { git log --no-merges --pretty=format:%an --numstat | awk '/./ && !author { author = $0; next } author { ins[author] += $1; del[author] += $2 } /^$/ { author = \"\"; next } END { for (a in ins) { printf \"%10d %10d %10d %s\n\", ins[a] - del[a], ins[a], del[a], a } }' | sort -rn; }; f"
fixed:  count-lines = "!f() { git log --no-merges --pretty=format:%an --numstat | awk '/./ && !author { author = $0; next } author { ins[author] += $1; del[author] += $2 } /^$/ { author = \"\"; next } END { for (a in ins) { printf \"%10d %10d %10d %s\\n\", ins[a] - del[a], ins[a], del[a], a } }' | sort -rn; }; f"
...