Как перечислить все мои сообщения 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:]]*//"