Как вывести список всех моих сообщений 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
Другие вопросы по тегам