2015-11-17 5 views
3

AimКак исключить каталоги при использовании git-журнала?

Я хотел бы знать количество строк изменилось в конкретном хранилище в течение определенного периода времени и напечатать это в простой текстовый файл. Однако, когда я запускаю код ниже, я получаю сообщение об ошибке, что я не уверен, как его решить.

Код

git log --stat --since="2015-01-01" --until="2015-11-16" `find . \(! -path "*[PATH]*" -a ! -path "*[PATH2]*" \)` | awk -F',' "/files? changed/ { 
    files += \$1 
    insertions += \$2 
    deletions += \$3 
    destination = \"$DESTINATION\"} 

END { 
    print \"Files Changed: \" files > destination 
    print \"Insertions: \" insertions > destination 
    print \"Deletions: \" deletions > destination 
    print \"Lines changed: \" insertions + deletions > destination}" 

Ошибка

fatal: ambiguous argument '[PATH]': unknown revision or path not in the working tree. 
Use '--' to separate paths from revisions 
awk: cmd. line:7: fatal: expression for `>' redirection has null string value 

Другая полезная информация

  • Версия Git используется 1.7.1. Поэтому я не могу использовать это: --oneline --format =% s -. ": (exclude) [PATH]"
  • Я знаю, что этот код работает, когда я не пытаюсь исключить каталоги.
  • Я также знаю, что «находка» работает правильно при запуске отдельно.

Вопрос

Может кто-то пожалуйста, помогите мне понять, что я сделал неправильно или обеспечить лучший способ исключить несколько каталогов?

Любая помощь будет высоко оценена.

+0

Просто мысль: есть ли какой-либо из файлов, возвращаемых 'find', где-нибудь (путь или имя файла)? Потому что этот обратный знак 'find' будет испорчен в этом случае. –

+0

Нет, хорошая идея Джефф, но, к сожалению, нет. Я только что проверил их, –

+0

У кого-нибудь еще есть идеи? –

ответ

0

Сообщение об ошибке, написанное git сообщает, как исправить ошибку. Проблема в том, что иногда git не может определить, указан ли первый аргумент, это путь или ревизия. -- может использоваться для устранения неоднозначности аргументов.

Помимо всего прочего, в вашем коде есть еще несколько мелких проблем. Оболочка также понимает простые кавычки, где переменные не расширяются. Вы обязательно должны написать свой скрипт awk в простых цитатах, так как он предотвращает неуклюжие escape-последовательности для спама вашего кода.

git log --stat --since='2015-01-01' --until='2015-11-16' $(find . \(! -path '*[PATH]*' -a ! -path '*[PATH2]*' \)) | awk -F',' ' 
/files? changed/ { 
    files += $1 
    insertions += $2 
    deletions += $3 
} 

END { 
    print "Files Changed: " files 
    print "Insertions: " insertions 
    print "Deletions: " deletions 
    print "Lines changed: " insertions + deletions 
}' > "${DESTINATION}" 

Кроме того, если вы пишете вывод только один файл, то проще позволить AWK написать свой доклад стандартного вывода и перенаправить его в файл, который вы хотите, а не делать перенаправление вывода в awk сам.

Смежные вопросы