Намного проще было бы использовать git blame:
git blame $ref -L'/search_pattern/,+1' filename(s)
Полный пример в моем репозитории zfs-fuse:
$ git for-each-ref --format='%(refname)' -- refs/heads |
while read ref;
do git blame $ref -L'/push/,+1' zfs_operations.c;
done
Как вы можете видетьполовина работы заключается в получении названий филиалов;Конечно, вы можете просто жестко изменить код, если это проще для вашего использования. Вывод из вышеперечисленного:
f5370a5e (Emmanuel Anne 2011-02-22 20:53:17 +0100 1492) static void push(zfsvfs_t *zfsvfs, cred_t *cred, fuse_ino_t ino, file_info_t *info, const char *buf, size_t size, off_t off)
f5370a5e (Emmanuel Anne 2011-02-22 20:53:17 +0100 1512) static void push(zfsvfs_t *zfsvfs, cred_t *cred, fuse_ino_t ino, file_info_t *info, const char *buf, size_t size, off_t off)
f5370a5e (Emmanuel Anne 2011-02-22 20:53:17 +0100 1512) static void push(zfsvfs_t *zfsvfs, cred_t *cred, fuse_ino_t ino, file_info_t *info, const char *buf, size_t size, off_t off)
Обратите внимание на номера строк ( 1492 против 1512 ):
f5370a5e (Эммануэль Энн 2011-02-22 20:53:17 +0100 1512 ) статический толчок пустоты (zfsvfs_t * zfsvfs, cred_t * cred, fuse_ino_tino, file_info_t * info, const char * buf, size_t size, off_t off)
Любые ревизии, которые не соответствуют шаблону поиска, покажут
fatal: -L parameter 'push': No match
Вы также хотите посмотреть на варианты:
-M (detect moved lines)
-n (show source line number)
-f (show filename, especially handy with -C)
-p / --incremental: if you want something parsed more easily in code