Пока я пишу, у нас 10 дней в 2012 году. Держу пари, что многие программисты редактируют строку с информацией об авторских правах в верхней части своих исходных файлов, например:
// Copyright 2008, 2010-2012 Some Company Unlimited
Ваша система контроля версий знает, когда файлы были изменены, так что, несомненно, она может помочь написать или переписать эти строки. Поэтому мой вопрос: существует ли скрипт, который может проверять журналы git для каждого файла и выводить (или лучше вставлять) строку, подобную этой?
Я использую git, так что это представляет основной интерес, но позвольте мне знать, существуют ли такие сценарии для других систем.
Обновить:
Нам нужен скрипт, который делает это:
- Ходит все исходные файлы в нашей рабочей копии
- Находит существующую строку авторского права и определяет годы, например, 2007,2009-2011 будет {2007, 2009, 2010, 2011}
- Для каждого года, который не указан, разница между 1 января и 31 декабря (или сегодня, если текущий год). Изучите diff и решите, стоит ли упоминать в строке об авторских правах
- Вставьте новую строку авторских прав.
Ответы:
TL; DR
Не волнуйся! Ваше авторское право на проект не истекает, если вы не обновили год вовремя! Вы в безопасности - это не работает таким образом.
Длинная версия:
Я уверен, что все цифры года в уведомлении об авторских правах указывают на начало авторского права, а не на диапазон. Если вы добавляете год, это означает начало, а не конец. Вы используете его, если добавляете новый контент (например, новые модули), чтобы указать начальный год только для этого нового контента. Это необязательно, но его следует использовать для больших изменений, таких как совершенно новые модули или полная модернизация проекта.
Срок действия авторского права истекает через фиксированное число лет (что зависит от законодательства вашей страны) после последнего года, указанного в вашем уведомлении.
Так что я не вижу причин для того, чтобы вообще обновлять заголовки исходного кода.
РЕДАКТИРОВАТЬ:
Дело в том, что обычно достаточно существенные изменения включают в себя совершенно новые исходные файлы или повторную реализацию старых. Так что, если вы всегда используете текущий год в заголовках новых исходных файлов, у вас все в порядке. Для обновления не требуется проходить через каждый файл. На самом деле, единственное, что требует ручного изменения, - это если у вас есть диапазон дат в тексте лицензии или в файле readme.
Отказ от ответственности: я программист, а не юрист.
источник
Это не скрипт как таковой, а функция Git , которую вы можете использовать для этой задачи: пара фильтров smudge / clean
источник
Нет, git не знает, когда файлы были изменены.
Git commit object просто определяет содержимое всех файлов в определенной точке. Тот же контент может легко появиться в другом коммите, даже не связанном. Там нет ничего, чтобы сделать один из них более важным. Таким образом, ответ может быть неоднозначным, хотя часто это не так.
источник
git log
?git log
, он проходит по коммитам, поэтому, конечно, он знает их дату. Но он может не знать, какой коммит ввел конкретную версию файла, потому что их может быть несколько.git log --follow [filename] | grep -m 1 Date
достаточно, чтобы получить самую последнюю дату.