Devo armazenar o db/schema no git?

#database, #dev, #git, #ruby

tl;dr

Não.

Por que você armazenaria um arquivo que é gerado baseado em outros arquivos (db/migrate)?

Por que você armazenaria um arquivo que muda baseado na máquina, ou nesse caso, na versão do PostgreSQL/MySQL?


Vamos ver primeiro as funcionalidades do db/schema.rb:

  1. É gerado baseado em outros arquivos, db/migrate;
  2. É gerado dependendo no seu banco de dados. Na máquina de produção pode ser de um jeito e na máquina de cada desenvolvedor pode ser de outro.

Por que desenvolvedores não armazenam arquivos binário no git? Vamos esquecer por um segundo que db/schema é um arquivo teste e fazer esse exercício mental.

Ninguém armazena arquivos binário no git porque é um arquivo gerado baseado em outros arquivos, idealmente se você tem o mesmo código fonte o compilador vai gerar o mesmo arquivo binário.

Então a pergunta seria: Por que armazenar um arquivo gerado baseado em outro(s) arquivo(s) quando você tem o código fonte?

Para a segunda pergunta vamos usar a mesma analogia de um binário 😂. Mas vamos esquecer que um binário é gerado baseado em outro(s) arquivo(s).

Porém, um binário depende da sua arquitetura, se você está numa máquina 32 bits ele será de um formato, se você estiver numa 64 será de outro.

Por que você armazenaria um arquivo que muda baseado na máquina de quem tá gerando o arquivo?

Eu não armazeno o db/schema.rb no git e sempre que alguém pergunta eu digo não armazene.

Se você armazena o db/schema.rb comente abaixo 😉.