#git #spring-boot #gitignore #spring-initializr
#git #spring-boot #gitignore #spring-инициализация
Вопрос:
Я создаю новое приложение Spring Boot. Я более чем умеренно знаком с .gitignore
шаблонами, но я вижу что-то намеренно шаблонное, в котором есть запах «намерения». Приведенное ниже создается Spring Initializr во многих IDE.
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
...
...
build/
!**/src/main/**/build/
!**/src/test/**/build/
Я полагаю, что это как-то связано с многомодульной функцией проекта maven, но приложения Initializr не являются многомодульными (при запуске). Это помимо того, что я здесь читаю?Если я попытался понять, что, по моему мнению, утверждается, это то, что я не хочу делать (как правило, практика).
«Игнорируйте
target/
папки, где бы они ни встречались, ноtarget
папки ниже верхнего уровняsome/path
/src/main/
deeper/still
/target/
включают их.«О, сделайте то же самое для
build/
каталогов NetBeans!»
Это не совсем имеет смысл. Зачем мне когда-либо фиксировать целевой контент, созданный сборкой? Таким образом, я пытаюсь вывести намерение инженеров Spring.
Обновить
На самом деле, это именно то, что это делает, включает target
или build
каталоги глубже в корне. С какой целью?
mkdir -p some/path/src/main/deeper/still/target/
touch !$/test.txt
Этот новый target
каталог включен для промежуточной обработки и фиксации. Удалите это, и оно будет проигнорировано.
Комментарии:
1. Мое использование
deeper/still
маскировало намерение, поскольку я также зациклился на использованииtarget
в отрицаемом операторе исключения. Я, вероятно, обнаружил бы намерение, если бы использовал более подходящий путь, то есть шаблон имени пакета, подобныйsrc/main/com/target/api
. Я отмечаю это в своем исследовании ниже.
Ответ №1:
По сути, эти «включенные» (отрицаемые исключения) гарантируют, что каталоги ниже src/main
и src/test
которые могут быть названы target
, например, именем пакета, не пропущены при фиксации.
В обсуждении Spring Initializr gitter Энди Уилкинсон, коммиттер Spring, отметил:
Это делается для предотвращения игнорирования для Maven build output directory (
target
) из-за того, что код в пакете с именемtarget
игнорируется.
Во многих случаях безопасно удаляется в отдельных случаях использования, «если вы не работаете на Target» (Target Brands, Inc. может иметь имена пакетов как com.target.api.*
) (привет Энди для примера).
На мой вопрос должен был быть дан ответ с использованием src/main
и src/test
, но я позволил неправильному использованию слова, target
, сбить меня с толку. На самом деле, я демонстрировал это на своем собственном примере, но не смог пройти мимо слова. О!