Может ли git отфильтровать определенные строки перед фиксацией?

У меня есть репозиторий на github, над которым я работаю, и у меня часто есть комментарии к моим .py файлам, которые начинаются с «# TODO:», чтобы сохранить личное примечание о том, что нужно сделать.

# TODO: do this <code>

Я, очевидно, не хочу, чтобы это было в коммите.

Я хочу, чтобы GitHub искал все файлы, когда я собираюсь их зафиксировать, и не включал строки, начинающиеся с # TODO:.

Git уже делает это? Я знаю, что в некоторых системах управления версиями, таких как perforce, уже есть эта функция.

Есть предположения?


person Sugetha Chandhrasekar    schedule 19.06.2015    source источник
comment
Вы, очевидно, хотите этого в своем коммите. Так что, если вы потеряете свою рабочую копию, у вас все еще будет список всего, что вам нужно сделать. Чтобы коллеги знали, что нужно что-то делать. Так что, если вы работаете на другой машине, вы можете знать, что нужно сделать. Это комментарии к коду. Комментарии полезны, особенно такие комментарии.   -  person JB Nizet    schedule 19.06.2015


Ответы (1)


Я хочу, чтобы GitHub искал все файлы, когда я собираюсь их зафиксировать, и не включал строки, начинающиеся с # TODO:.

GitHub (серверная сторона) этого не сделает.

Но вы можете в своем локальном репозитории зарегистрировать драйвер фильтра контента, который сделает это для вы на git commit (как sed '/^# TODO:/ d').

http://i.stack.imgur.com/EQiwd.png

(изображение показано в "Настройка Git - Атрибуты Git", из "Pro Git book")< / суп>

Фильтр 'clean' может отфильтровать эти строки (я не буду обсуждать, следует ли их оставлять или нет), и этот фильтр будет применяться автоматически при выполнении git commit.
Это, очевидно, удалит все TODO, включая те, что оставлены другими, так что относитесь к этому с осторожностью: это технически возможно, но вы должны определить, нужно ли это/полезно в вашем случае.


Обновление за февраль 2016 г .: с git 2.8, даже если вы определили фильтр содержимого git, вы можете git add пунктуально без применения фильтра очистки, если это необходимо:

См. commit 1a8630d (29 января 2016 г.) от Ларс Шнайдер (larsxschneider).
(объединено Хунио C Хамано -- gitster -- в commit a3764e7, 10 февраля 2016 г.)

convert: обрабатывать пустую строку для фильтров очистки/размазывания как "cat"

git -c filter.myFilter.clean= add test.disable
                            ^^
                          (empty value)
person VonC    schedule 19.06.2015
comment
Имейте в виду, что если кто-то каким-либо образом изменит файл, а затем вы извлечете этот файл, ваши комментарии, конечно, будут потеряны. - person David Deutsch; 19.06.2015
comment
@DavidDeutsch Я согласен. Мой ответ был больше, чтобы указать, что это технически возможно. Действительно ли это хорошая политика для обеспечения соблюдения, это другой вопрос ... - person VonC; 19.06.2015