A documentação gerada deve ser armazenada em um repositório Git?

49

Quando você usa ferramentas como jsdocs , ele gera arquivos HTML estáticos e seus estilos na sua base de código com base nos comentários no seu código.

Esses arquivos devem ser verificados no repositório Git ou devem ser ignorados com .gitignore?

coleta de lixo
fonte
4
Pode haver um argumento para armazená-los em um repositório do GitHub, pois você pode publicar o HTML estático usando páginas . Embora, então, surja um conjunto de argumentos completamente separado sobre como você garante que eles estejam atualizados, etc ...
Boris the Spider
21
Se os arquivos são gerados, então, por definição, eles não são de origem .
chrylis -on strike -
3
Você publica o que deseja publicar. Especialmente no GitHub. Se você quiser que todos vejam um PDF ou imagem gerada, inclua-o em vez de esperar que todos instalem o LaTeX e os compilem. Por exemplo, este repositório não seria muito bom se não incluísse as imagens produzidas, apenas os arquivos do projeto ...
Džuris
7
Como consumidor de bibliotecas de terceiros, das 10 vezes em que vejo uma biblioteca sem documentação on-line (seja em uma subpasta do repositório ou vinculada ao leia-me), clicarei e pulo essas bibliotecas, todas as 10 vezes . Não vou mexer com o Doxygen por meia hora apenas para ver se uma biblioteca atende às minhas necessidades.
Alexander

Respostas:

131

Ausente qualquer necessidade específica, qualquer arquivo que possa ser criado, recriado, construído ou gerado a partir de ferramentas de construção usando outros arquivos verificados no controle de versão não deve ser registrado. Quando o arquivo for necessário, ele pode ser (re) criado a partir do outro fontes (e normalmente seria como algum aspecto do processo de compilação).

Portanto, esses arquivos devem ser ignorados com .gitignore.

1201ProgramAlarm
fonte
4
Mas isso pode depender das versões das ferramentas de construção ou mesmo da disponibilidade das ferramentas de construção (por exemplo, para gerar alguns arquivos, é necessária uma versão antiga de uma ferramenta de construção). Como você lida com isso? Você pode resolver isso na sua resposta?
Peter Mortensen
27
@PeterMortensen Se você precisar de um artefato construído com uma versão especial das ferramentas buld, crie-o com a versão das ferramentas de construção necessárias. Essa necessidade é: a) descoberta por você mesmo; nesse caso, você está por sua conta; b) documentado em README ("Você precisará de duas com duas versões específicas do doxygen instaladas ..."); c) tratados pelos scripts de construção (eles verificam as versões disponíveis das ferramentas de construção e agem apropriadamente). Em qualquer caso, o controle de origem é para fontes, não para artefatos de construção.
Joker_vD
2
Acho que essa resposta só é viável se um servidor de implantação contínua cria e publica a documentação de uma maneira facilmente acessível. Caso contrário, há um grande valor em "armazenar em cache" os documentos no repositório, para melhorar a acessibilidade. Nenhum usuário deve mexer com seus scripts de construção apenas para ver a documentação do seu software.
Alexander
4
@Alexander Você também colocaria o binário incorporado no repositório? A documentação é construída. Você pega a documentação criada e a torna acessível em algum lugar.
1201ProgramAlarm
5
@ 1201ProgramAlarm "Você também colocaria o binário incorporado no repositório?" Não, porque um binário construído tem um valor inicial baixo para as pessoas que navegam no GitHub, em comparação com a documentação. "Você pega a documentação criada e a torna acessível em algum lugar." Contanto que seja publicamente hospedado, visivelmente vinculado, sim, isso é ótimo. Provavelmente é o melhor caso.
Alexander
23

Minha regra é que, quando clono um repositório e pressiono um botão "build", depois de um tempo tudo é criado. Para conseguir isso para a documentação gerada, você tem duas opções: alguém é responsável por criar esses documentos e colocá-los no git, ou documenta exatamente qual software eu preciso na minha máquina de desenvolvimento e certifique-se de pressionar a tecla "build" O botão cria toda a documentação em minha máquina.

No caso da documentação gerada, em que qualquer alteração única que eu faço em um arquivo de cabeçalho deve alterar a documentação, é melhor fazer isso na máquina de cada desenvolvedor, porque desejo a documentação correta o tempo todo, não apenas quando alguém a atualizou. Há outras situações em que gerar algo pode ser demorado, complicado, requer software para o qual você tem apenas uma licença etc. Nesse caso, é melhor dar a uma pessoa a responsabilidade de colocar as coisas no git.

@Urt Simpson: Ter todos os requisitos de software documentados é muito melhor do que eu já vi em muitos lugares.

gnasher729
fonte
7
Não documente qual software alguém precisa para a compilação (ou pelo menos não apenas documente): faça o script de compilação dizer ao usuário o que está faltando ou até mesmo instale-o, se for razoável. Na maioria dos meus repositórios, qualquer desenvolvedor competente na metade do caminho pode simplesmente executar ./Teste obter uma compilação ou obter boas informações sobre o que ele precisa fazer para obter uma compilação.
Curt J. Sampson
5
Eu realmente não concordo que colocar a documentação gerada no git pode ser bom no caso de você especificar. Essa é a razão pela qual temos artefatos e arquivos.
Sulthan
Essa é a sua regra e é uma boa regra e eu gosto. Mas outros podem fazer suas próprias regras.
emory
Acho que você quer dizer "executar um comando de compilação", pois não haveria botão de compilação na sua máquina. ... A menos que você espere que toda a compilação seja integrada a um IDE, o que é totalmente irracional.
jpmc26
@ jpmc26 Acho totalmente razoável ter toda a compilação integrada em um IDE. O botão de compilação na minha máquina é Command-B.
gnasher729
14

Esses arquivos não devem ser registrados porque os dados para gerá-los já estão presentes. Você não deseja armazenar dados duas vezes (DRY).

Se você possui um sistema de IC, talvez seja possível criar esses documentos e armazená-los para que os compilem / publiquem em um servidor da web.

Tvde1
fonte
4

Uma vantagem de tê-los em algum repositório (igual ou diferente, de preferência gerado automaticamente) é que você poderá ver todas as alterações na documentação. Às vezes, essas diferenças são mais fáceis de ler do que as diferenças no código-fonte (especificamente se você se importa apenas com alterações de especificação, não com a implementação).

Mas na maioria dos casos, não é necessário tê-los no controle de origem, como as outras respostas explicaram.

Paŭlo Ebermann
fonte
11
Isso exigiria praticamente um gancho de pré-confirmação em cada repo usado para criar confirmações. Como se o processo de geração de documentação não for totalmente automatizado, você obterá confirmações com a documentação fora de sincronia com o código. E esses commits quebrados prejudicarão a compreensão mais do que a documentação não confirmada.
cmaster
11
Isso não precisa estar no estágio de confirmação. Poderia facilmente ser um trabalho a jusante / CI / Jenkins publicá-los sempre que forem considerados dignos de armazenamento. Pode ser que cada commit seja confirmado, mas a decisão deve ser dissociada na ausência de um bom motivo. Ou pelo menos é assim que eu vejo.
Anone
3

Ignorado. Você deseja que os usuários do repositório possam reconstruí-los de qualquer maneira, e isso elimina a complexidade de garantir que os documentos estejam sempre sincronizados. Não há razão para não ter os artefatos construídos agrupados em um só lugar, se você quiser ter tudo em um só lugar e não precisar construir nada. No entanto, os repositórios de fontes não são realmente um bom lugar para fazer isso, embora, como a complexidade prejudique mais do que a maioria dos lugares.

ANone
fonte
2

Depende do seu processo de implantação. Mas enviar arquivos gerados para um repositório é uma exceção e deve ser evitado, se possível. Se você puder responder às duas perguntas a seguir com Sim , fazer check-in de seus documentos pode ser uma opção válida:

  • Os documentos são um requisito para produção?
  • Seu sistema de implantação não possui as ferramentas necessárias para criar os documentos?

Se essas condições forem verdadeiras, você provavelmente está implantando com um sistema legado ou com restrições especiais de segurança. Como alternativa, você pode confirmar os arquivos gerados em uma ramificação de liberação e manter a ramificação principal limpa.

Trendfischer
fonte
11
Enviar arquivos gerados em uma ramificação de lançamento não funciona em todas as situações, mas há vários, especialmente em sites estáticos criados a partir de descontos, onde essa é uma excelente solução. Faço isso com frequência suficiente para criar uma ferramenta especial para gerar facilmente esses commits como parte do processo de compilação.
Curt J. Sampson
2

Depende. Se esses documentos:

  • Precisa fazer parte do repositório, como o readme.md, então é preferível mantê-los no repositório git. Porque pode ser complicado lidar com essas situações de maneira automatizada.

  • Se você não tem uma maneira automatizada de construí-los e atualizá-los, como um sistema de IC, e se destina a ser visto pelo público em geral, é preferível mantê-los no repositório git.

  • Leva muito tempo para construí-los, então é justificável mantê-los.

  • Destina-se a ser visto pelo público em geral (como o manual do usuário), e leva um tempo considerável para compilar, enquanto seus documentos anteriores se tornam inacessíveis (offline), então é justificável mantê-los no repositório git.

  • Destina-se a ser visto pelo público em geral e deve mostrar um histórico de suas alterações / evolução, pode ser mais fácil manter as versões anteriores do documento comprometidas e criar / confirmar a nova vinculada à anterior. Justificável.

  • Tem um motivo específico aceito para todo o time ser comprometido, então é justificável mantê-los no repositório git. (Não conhecemos seu contexto, você e sua equipe)

Em qualquer outro cenário, ele deve ser ignorado com segurança.

No entanto, se for justificável mantê-los no repositório git, pode ser um sinal de outro problema maior que sua equipe está enfrentando. (Não possui um sistema de IC ou problemas semelhantes e horríveis de desempenho, enfrentando tempo de inatividade durante a criação, etc.)

throawableAccount2892391
fonte
1

Como princípio do controle de versão, apenas "objetos primários" devem ser armazenados em um repositório, não "objetos derivados".

Existem exceções à regra: a saber, quando há consumidores do repositório que exigem os objetos derivados e é razoavelmente esperado que não tenham as ferramentas necessárias para gerá-los. Outras considerações pesam, como é a quantidade de material pesado? (Seria melhor para o projeto conseguir que todos os usuários tivessem as ferramentas?)

Um exemplo extremo disso é um projeto que implementa uma linguagem de programação rara cujo compilador é escrito nessa própria linguagem (exemplos conhecidos incluem Ocaml ou Haskell) Se apenas o código-fonte do compilador estiver no repositório, ninguém poderá construí-lo; eles não têm uma versão compilada do compilador que podem ser executados na máquina virtual, para que possam compilar o código-fonte do compilador. Além disso, os recursos mais recentes da linguagem são imediatamente usados ​​na própria fonte do compilador, para que seja sempre necessária a versão mais recente do compilador para compilá-lo: um executável do compilador de um mês, obtido separadamente, não compilará o código atual porque o código usa recursos de idioma que não existiam há um mês. Nessa situação, a versão compilada do compilador quase certamente precisa ser verificada no repositório e mantida atualizada.

Kaz
fonte