Как вывести список всех моих сообщений TODO в текущей базе Git управляемого кода
Я хочу видеть все комментарии TODO, которые только я написал и которые существуют в текущей кодовой базе, которой управляет git.
До сих пор я печатал все комментарии TODO, которые я когда-либо создавал или изменял за всю историю git: git log -p --author="My name" -S TODO | grep "\+.*TODO"
Но эта цепочка инструментов перечисляет все комментарии TODO, когда-либо написанные, даже те, которые я уже разрешил и таким образом снова удалил из кода.
Существует ли инструмент, который может построчно искать текущую кодовую базу, проверять, содержит ли она "TODO" и была ли эта строка написана мной, а затем печатать эти строки?
4 ответа
Вы можете объединить git blame
с grep.
Вот так (не самый лучший, но должен работать)
git grep -l TODO | xargs -n1 git blame | grep 'Your name' | grep TODO
Улучшенные версии могут объединять номера строк, найденные первым grep с git blame
Способность показывать только данные строки.
Я хочу добавить решение aragaer и Кайла:
- используйте grep config, чтобы получить ваше имя
- отображение имени файла и номера строки комментария TODO
- удаление SHA коммита, имени автора и метки времени коммита
git grep -l TODO | xargs -n1 git blame -f -n -w | grep "$(git config user.name)" | ГРЕП ТОДО | sed "s/.\{9\}//" | sed "s/(.*)[[:space:]]*//"
Это печатает:
Cpp / CoolClass.cpp 123 // TODO: это нам действительно нужно? Cpp/AnotherClass.cpp 42 // ТОДО: Мы что-то пропускаем? Java/MyListener.java 23 //TODO: оптимизировать
Я обнаружил, что имя пользователя может содержать пробелы, поэтому его проще фильтровать по адресу электронной почты. Кроме того, @todo (нижний регистр) - это мой способ добавления заметок в docblocks, поэтому я добавил флаг "игнорировать нижний / верхний регистр". Это мое решение:
git grep -il TODO | xargs -n1 git blame -M -f -e | grep -i TODO | grep $(git config user.email)
Небольшое предположение, что я только что наткнулся, большой репо и несколько бинарных файлов. xargs -ni git blame
раздел вызывал неожиданный термин с сигналом 13. Я обошел это, добавив -I
включите начальный git grep.
FWIW здесь полная ошибка (иди в Google)
xargs: git: terminated by signal 13
Вот пример, который я использовал (также удалил grep для моей шахты, поскольку хотел видеть все)
git grep -I -l TODO | xargs -n1 git blame -f -n -w | grep TODO | sed "s/.\{9\}//" | sed "s/(.*)[[:space:]]*//"
В комплекте с использованием git config
чтобы получить ваше имя:
git grep -l TODO | xargs -n1 git blame | grep "$(git config user.name)" | grep TODO