Я не всегда уверен, почему rush change [-v]
выводит или не выводит список проекта. Иногда я также хотел бы увидеть свои коммиты, из-за которых rush запросил файл изменений. Ну, знаете, для должной осмотрительности 🙂
Под капотом
Я посмотрел на код rush, чтобы убедиться, что я понимаю, что происходит.
Включено в «измененные проекты»
Во-первых, rush change [-v]
вызывает git merge-base
, чтобы найти целевой коммит. Это будет ваше последнее слияние с targetBranch
.
librariesrush-libsrclogicGit.ts
# getMergeBase()
git --no-optional-locks merge-base -- HEAD ${targetBranch}
Затем он находит все измененные файлы, отслеживаемые Git’ом, что включает как поставленные, так и зафиксированные изменения.
librariespackage-deps-hashsrcgetRepoState.ts
# getRepoChanges()
# revision: the mergeBase from the previous step
git --no-optional-locks diff-index --no-renames --no-commit-id `
--cached -z ${revision} --
Да, поэтапные изменения также приводят к тому, что ваш проект попадает в список
rush change
.
НЕ включается в «измененные проекты»
Далее, rush change
проверяет, соответствуют ли вновь добавленные файлы изменений измененным пакетам. В основном это означает, что любой проект с файлом изменений будет удален из списка «измененных проектов» и, по сути, от вас НЕ потребуется создавать файл изменений.
Не имеет значения, если вы сделали какие-либо фиксации после того, как был создан файл изменений. Проект НЕ будет требовать другого файла изменений.
спешка, что изменилось
rush whatchanged
— это пользовательская команда, которую вы можете установить с помощью генератора yeoman:yo rush-conventionalcommits
.
Было бы полезно узнать, что именно заставляет rush change
запрашивать файл изменений? Это поэтапные или зафиксированные изменения? И если есть коммиты с момента последнего слияния, легко просматривать их?
Если вы используете обычные коммиты, можно было бы предложить тип изменения, чтобы не тратить время на принятие решения о том, что уже «есть».
Возможно, когда-нибудь это появится в rush (см. здесь), а пока я использую пользовательскую команду rush rush whatchanged
.
При запуске без параметров она отображает сводную информацию.
Вы можете увидеть, сколько коммитов и поэтапных файлов у вас есть для каждого проекта. Вы также получите предупреждение, если файл изменений уже существует, поскольку rush change
будет игнорировать этот проект.
rush whatchanges —showcommits
Если для проекта существует файл изменений, rush whatchanges --showcommits
предоставит вам историю коммитов, сделанных ПОСЛЕ создания последнего файла изменений.
shortlog
rush whatchanges --showcommits shortlog
выполняет git shortlog
и выводит вывод на терминал.
полный
Если у вас много коммитов, и читать их в консоли неудобно, используйте rush whatchanges --showcommits full
. Он сохраняет историю коммитов в папку rush temp:
rush whatchanges —recommend-changetype
Эта команда разбирает ваши коммиты и анализирует их, следуя общепринятой конвенции коммитов.
Если файл изменений уже существует, учитываются только коммиты после последнего файла изменений.
Сценарий вызывает git rev-list --count --grep
с регулярным выражением для фильтрации и подсчета сообщений о коммитах.
major
Для обнаружения и подсчета коммитов, которые могут потребовать серьезных изменений:
git rev-list --count --extended-regexp --grep "(^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(.*?)?!:.*|^BREAKING CHANGE: )" -- "${projectFolder}"
minor
Если коммиты, вызывающие серьезные изменения, не найдены, скрипт ищет коммиты с незначительными изменениями:
git rev-list --count --extended-regexp --grep "^feat((.*?))?:" -- "${projectFolder}"
патч
И, наконец, если нет ни крупных, ни мелких изменений, он посмотрит, есть ли коммиты, вызывающие патч-бамп:
git rev-list --count --extended-regexp --grep "^fix((.*?))?:" -- "${projectFolder}"
none
Если не найдено ни одного крупного/мелкого/патча изменения, рекомендуется использовать тип изменений none
. Это может означать, что у вас либо не было изменений, вызывающих бамп версии, либо вы не используете обычные коммиты =) Я не делаю различий между этими двумя случаями, потому что если верно последнее, то вам не следует вызывать rush whatchanges --recommend-changetype
=)
Ресурсы
Вы можете установить генератор yeoman из npm
Как всегда, код находится на github