Как перечислить все мои сообщения TODO в текущей управляемой кодовой базе git

Я хочу видеть все комментарии TODO, которые были написаны только I и существуют в текущей базе кода git.

Что я до сих пор, печатает все комментарии TODO, которые я когда-либо создавал или модифицировал в течение всей истории git: git log -p --author="My name" -S TODO | grep "\+.*TODO"

Но в этой цепочке инструментов перечислены все написанные TODO комментарии, даже те, которые я уже разрешил и, таким образом, снова удалены из кода.

Есть ли инструмент, который может последовательно искать текущую базу кода, проверьте, содержит ли он "TODO", и если эта строка была создана мной, а затем распечатала эти строки?

Ответы

Ответ 1

Вы можете комбинировать git blame с grep.

Как это (не лучший, но должен работать)

git grep -l TODO | xargs -n1 git blame | grep 'Your name' | grep TODO

Улучшенные версии могут сочетать номера строк, найденные первым grep с возможностью git blame показывать только заданные строки.

Ответ 2

Я хочу добавить в решение aragaer и Kyle:

  • используйте grep config, чтобы получить ваше имя
  • отображение имени файла и номера строки комментария TODO
  • удаление фиксации SHA, имя автора и отметка фиксации
git grep -l TODO | xargs -n1 git blame -f -n -w | grep "$(git config user.name)" | grep TODO | sed "s/.\{9\}//" | sed "s/(.*)[[:space:]]*//"

Отпечатки:

Cpp/CoolClass.cpp 123 //TODO: Do we really need this?
Cpp/AnotherClass.cpp 42 //TODO: Do we miss something?
Java/MyListener.java 23 //TODO: Optimize

Ответ 3

Я обнаружил, что имя пользователя может иметь пробелы, поэтому его проще фильтровать по электронной почте. Кроме того, @todo (в нижнем регистре) - это мой способ добавления заметок в docblocks, поэтому я добавил флаг "игнорировать нижний/верхний регистр". Это мое решение:

git grep -il TODO | xargs -n1 git blame -M  -f -e | grep -i TODO | grep $(git config user.email)

Ответ 4

В комплекте с использованием git config, чтобы получить ваше имя:

git grep -l TODO | xargs -n1 git blame | grep "$(git config user.name)" | grep TODO

Ответ 5

Небольшое предположение, что я только что натолкнулся, большой репозиторий и несколько бинарных файлов. xargs -ni git blame вызывала неожиданный термин с сигналом 13. Я -I этим, добавив переключатель -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:]]*//"