过度提交 RailsSchemaUpToDate 在 --运行 时通过但在提交时失败
Overcommit RailsSchemaUpToDate passes when --run but fails when commit
我在使用 overcommit
和 Rails 5.0.2
应用 ruby 2.4.0
时遇到一个奇怪的问题:
$ overcommit --run
Running pre-commit hooks
Check if database schema is up to date..........[RailsSchemaUpToDate] OK
Check YAML syntax........................................[YamlSyntax] OK
Check Gemfile dependencies..............................[BundleCheck] OK
Check for vulnerable versions of gems...................[BundleAudit] OK
Analyze with RuboCop........................................[RuboCop] OK
Analyze with haml-lint.....................................[HamlLint] OK
✓ All pre-commit hooks passed
$ git ci -m "Overcommit and Linters added"
Running pre-commit hooks
Check if database schema is up to date..........[RailsSchemaUpToDate] FAILED
It looks like you're adding a migration, but did not update the schema file
Check YAML syntax........................................[YamlSyntax] OK
Check Gemfile dependencies..............................[BundleCheck] OK
Check for vulnerable versions of gems...................[BundleAudit] OK
Analyze with RuboCop........................................[RuboCop] OK
Analyze with haml-lint.....................................[HamlLint] OK
✗ One or more pre-commit hooks failed
这是我的相关部分 Gemfile
:
group :lint do
gem 'overcommit', '~> 0.41', require: false # hook event pre-commit, pre-push
gem 'brakeman', '~> 3.7.2', require: false # A static analysis security vulnerability scanner
gem 'haml-lint', '~> 0.26', require: false # Syntax checker for HAML
gem 'ruby_css_lint', '~> 0.1', require: false # Syntax checker for CSS
gem 'rubocop', '~> 0.50', require: false # A Ruby static code analyzer
gem 'bundler-audit', '~> 0.6' # Check dependencies
end
在我的 .overcommit.yml
我有:
PreCommit:
ALL:
exclude:
- 'bin/**'
- 'public/**'
- 'vendor/**'
# ...
# Migration Check
RailsSchemaUpToDate:
enabled: true
on_warn: fail
我的数据库文件夹结构是:
+-- db
| +-- seeds.rb
| +-- migrate
| +-- 20170922082256_devise_create_users.rb
| +-- 20170922084050_create_fans.rb
| +-- schema.rb
这是我db/schema.rb
的相关部分:
ActiveRecord::Schema.define(version: 20170922084050) do
# ...
end
我尝试降级到 ruby 2.3.1
,但我仍然遇到同样的问题。
有人遇到同样的问题吗?
我认为不同之处在于 overcommit --run
正在查看已经提交给 master 的内容,而预提交挂钩正在查看您要提交的内容。
查看 the source,当 if migration_files.any? && schema_files.none?
为真时会显示您收到的错误消息。即db/migrate/
下有文件,db/schema.rb
下没有文件
你能显示 git status
的输出吗?也许您的 db/schema.rb
文件不知何故被删除了?
其实我想通了。
似乎 overcommit --run
针对整个项目运行(除了未准备提交的更改),而 Pre-Commit 挂钩仅在要提交的更改时触发。
我在该提交中添加了所有 linter,我 运行 bundle exec rubocop --auto-correct
在我的 .rubocop.yml
中为所有警察排除了 db/schema.rb
。
这导致存在 migration_files
(编辑了先前的迁移文件)而没有 schema_files
(schema.rb
上未进行任何更改),因此:
if migration_files.any? && schema_files.none?
根据 source linked by Brian. 发现 引发了错误
出于这个原因,我刚刚承诺禁用过度使用,并且从下一次提交开始,此错误不再重现
$ OVERCOMMIT_DISABLED=1 git ci -m "Overcommit and Linters added"
我在使用 overcommit
和 Rails 5.0.2
应用 ruby 2.4.0
时遇到一个奇怪的问题:
$ overcommit --run
Running pre-commit hooks
Check if database schema is up to date..........[RailsSchemaUpToDate] OK
Check YAML syntax........................................[YamlSyntax] OK
Check Gemfile dependencies..............................[BundleCheck] OK
Check for vulnerable versions of gems...................[BundleAudit] OK
Analyze with RuboCop........................................[RuboCop] OK
Analyze with haml-lint.....................................[HamlLint] OK
✓ All pre-commit hooks passed
$ git ci -m "Overcommit and Linters added"
Running pre-commit hooks
Check if database schema is up to date..........[RailsSchemaUpToDate] FAILED
It looks like you're adding a migration, but did not update the schema file
Check YAML syntax........................................[YamlSyntax] OK
Check Gemfile dependencies..............................[BundleCheck] OK
Check for vulnerable versions of gems...................[BundleAudit] OK
Analyze with RuboCop........................................[RuboCop] OK
Analyze with haml-lint.....................................[HamlLint] OK
✗ One or more pre-commit hooks failed
这是我的相关部分 Gemfile
:
group :lint do
gem 'overcommit', '~> 0.41', require: false # hook event pre-commit, pre-push
gem 'brakeman', '~> 3.7.2', require: false # A static analysis security vulnerability scanner
gem 'haml-lint', '~> 0.26', require: false # Syntax checker for HAML
gem 'ruby_css_lint', '~> 0.1', require: false # Syntax checker for CSS
gem 'rubocop', '~> 0.50', require: false # A Ruby static code analyzer
gem 'bundler-audit', '~> 0.6' # Check dependencies
end
在我的 .overcommit.yml
我有:
PreCommit:
ALL:
exclude:
- 'bin/**'
- 'public/**'
- 'vendor/**'
# ...
# Migration Check
RailsSchemaUpToDate:
enabled: true
on_warn: fail
我的数据库文件夹结构是:
+-- db
| +-- seeds.rb
| +-- migrate
| +-- 20170922082256_devise_create_users.rb
| +-- 20170922084050_create_fans.rb
| +-- schema.rb
这是我db/schema.rb
的相关部分:
ActiveRecord::Schema.define(version: 20170922084050) do
# ...
end
我尝试降级到 ruby 2.3.1
,但我仍然遇到同样的问题。
有人遇到同样的问题吗?
我认为不同之处在于 overcommit --run
正在查看已经提交给 master 的内容,而预提交挂钩正在查看您要提交的内容。
查看 the source,当 if migration_files.any? && schema_files.none?
为真时会显示您收到的错误消息。即db/migrate/
下有文件,db/schema.rb
下没有文件
你能显示 git status
的输出吗?也许您的 db/schema.rb
文件不知何故被删除了?
其实我想通了。
似乎 overcommit --run
针对整个项目运行(除了未准备提交的更改),而 Pre-Commit 挂钩仅在要提交的更改时触发。
我在该提交中添加了所有 linter,我 运行 bundle exec rubocop --auto-correct
在我的 .rubocop.yml
中为所有警察排除了 db/schema.rb
。
这导致存在 migration_files
(编辑了先前的迁移文件)而没有 schema_files
(schema.rb
上未进行任何更改),因此:
if migration_files.any? && schema_files.none?
根据 source linked by Brian. 发现 引发了错误
出于这个原因,我刚刚承诺禁用过度使用,并且从下一次提交开始,此错误不再重现
$ OVERCOMMIT_DISABLED=1 git ci -m "Overcommit and Linters added"