La documentazione generata deve essere archiviata in un repository Git?


49

Quando usi strumenti come jsdocs , genera file HTML statici e i suoi stili nella base di codice in base ai commenti nel codice.

Questi file dovrebbero essere archiviati nel repository Git o dovrebbero essere ignorati con .gitignore?


4
Potrebbe esserci un argomento per memorizzarli in un repository GitHub in quanto è possibile pubblicare l'HTML statico usando le pagine . Anche se poi sorgono una serie di argomenti completamente separati su come assicurarti che siano aggiornati, ecc ...
Boris the Spider,

21
Se i file vengono generati, per definizione non sono di origine .
Chrylis

3
Pubblica ciò che vuoi pubblicare. Soprattutto su GitHub. Se vuoi che tutti vedano un PDF o un'immagine generati, dovresti includerlo invece di aspettarti che tutti installino LaTeX e lo compilino da soli. Ad esempio, questo repository non sarebbe molto buono se non includesse le immagini prodotte, solo i file di progetto ...
Džuris


7
Come consumatore di librerie di terze parti, su 10 volte che vedo una libreria senza documentazione online (sia in una sottocartella del repository, sia collegata dal readme), farò clic e salterò quelle librerie, tutte e 10 le volte . Non andrò in giro con Doxygen per mezz'ora solo per vedere se una biblioteca soddisfa i miei bisogni.
Alexander

Risposte:


131

In assenza di esigenze specifiche, non è possibile archiviare qualsiasi file che può essere creato, ricreato, creato o generato da strumenti di compilazione utilizzando altri file sottoposti a controllo della versione. Quando è necessario, può essere (ri) creato dall'altro fonti (e normalmente sarebbero un aspetto del processo di compilazione).

Quindi quei file dovrebbero essere ignorati con .gitignore.


4
Ma ciò può dipendere dalle versioni degli strumenti di compilazione o persino dalla disponibilità degli strumenti di compilazione (ad esempio, per generare alcuni file è necessaria una versione precedente di uno strumento di compilazione). Come lo gestisci? Puoi affrontarlo nella tua risposta?
Peter Mortensen,

27
@PeterMortensen Se hai bisogno di un artefatto creato con una versione speciale di strumenti buld, lo costruisci con la versione degli strumenti di costruzione di cui hai bisogno. Un tale bisogno è o) scoperto da solo, nel qual caso sei da solo; b) documentato in README ("Ne avrai bisogno di due con due versioni specifiche di doxygen installate ..."); c) trattati dagli script di build (controllano le versioni degli strumenti di build disponibili e agiscono in modo appropriato). In ogni caso, il controllo del codice sorgente è per le fonti, non per i manufatti di costruzione.
Joker_vD

2
Penso che questa risposta sia fattibile solo se un server di distribuzione continua crea e pubblica la documentazione in modo facilmente accessibile. Altrimenti, c'è un grande valore nella "memorizzazione nella cache" dei documenti nel repository, per migliorare l'accessibilità. Nessun utente dovrebbe dover confondere con gli script di build solo per vedere la documentazione del software.
Alexander

4
@Alexander Metteresti anche il binario incorporato nel repository? La documentazione è costruita. Prendi la documentazione costruita e la rendi accessibile da qualche parte.
1201 Programma Allarme

5
@ 1201ProgramAlarm "Inseriresti anche il file binario incorporato nel repository?" No, perché un binario incorporato ha un basso valore iniziale per le persone che navigano in GitHub, rispetto alla documentazione. "Prendi la documentazione costruita e la rendi accessibile da qualche parte." Finché è ospitato pubblicamente, visibilmente collegato, allora sì, è grandioso. È probabilmente il caso migliore.
Alexander

23

La mia regola è che quando clonare un repository e premo un pulsante "build", poi, dopo un po ', tutto viene creato. Per ottenere ciò per la tua documentazione generata, hai due scelte: o qualcuno è responsabile della creazione di questi documenti e della loro messa in git, oppure documenti esattamente quale software mi serve sulla mia macchina di sviluppo e ti assicuri che premendo il tasto "build" pulsante crea tutta la documentazione sulla mia macchina.

Nel caso della documentazione generata, in cui qualsiasi singola modifica apportata a un file di intestazione dovrebbe modificare la documentazione, è meglio farlo sulla macchina di ogni sviluppatore, perché voglio sempre la documentazione corretta, non solo quando qualcuno l'ha aggiornata. Ci sono altre situazioni in cui la generazione di qualcosa potrebbe richiedere molto tempo, complicata, richiedere software per il quale si dispone di una sola licenza, ecc. In tal caso, dare a una persona la responsabilità di mettere le cose in git è meglio.

@Curt Simpson: avere tutti i requisiti software documentati è molto meglio di quanto abbia mai visto in molti posti.


7
Non documentare quale software qualcuno ha bisogno per la build (o almeno non solo documentare): fai in modo che lo script di build dica all'utente ciò che manca o installalo da solo se è ragionevole. Nella maggior parte dei miei repository qualsiasi sviluppatore competente a metà strada può semplicemente eseguire ./Teste ottenere una build o ottenere buone informazioni su ciò che deve fare per ottenere una build.
Curt J. Sampson,

5
Non sono davvero d'accordo sul fatto che mettere la documentazione generata in git possa essere utile nel caso specificato. Questo è il motivo per cui abbiamo manufatti e archivi.
Sulthan,

Questa è la tua regola ed è una buona regola e mi piace. Ma altri possono fare le proprie regole.
emory

Penso che intendi "eseguire un comando build", in quanto non ci sarebbe alcun pulsante build sulla tua macchina. ... A meno che non ti aspetti che l'intera build sia integrata con un IDE, il che è del tutto irragionevole.
jpmc26

@ jpmc26 Trovo assolutamente ragionevole che l'intera build sia integrata in un IDE. Il pulsante di generazione sulla mia macchina è Command-B.
gnasher729,

14

Questi file non devono essere archiviati perché i dati per generarli sono già presenti. Non si desidera memorizzare i dati due volte (DRY).

Se hai un sistema CI, potresti forse creare quel documento e archiviarlo per quel build / pubblicarlo su un server web.


4

Un vantaggio di averli in alcuni repository (uguali o diversi, preferibilmente generati automaticamente) è che puoi vedere tutte le modifiche alla documentazione. A volte queste differenze sono più facili da leggere rispetto alle differenze al codice sorgente (in particolare se ti interessano solo le modifiche alle specifiche, non l'implementazione).

Ma nella maggior parte dei casi non è necessario averli nel controllo del codice sorgente, come spiegato nelle altre risposte.


1
Ciò richiederebbe praticamente un hook pre-commit in ogni repository utilizzato per creare commit. Perché se il processo di generazione della documentazione non è completamente automatizzato, si otterranno commit con la documentazione non sincronizzata con il codice. E questi impegni rotti danneggeranno la comprensibilità più della documentazione non impegnata.
cmaster

1
Questo non deve essere nella fase di commit. Potrebbe essere facilmente un lavoro a valle / CI / Jenkins pubblicarli ogni volta che sono considerati degni di archiviazione. Potrebbe trattarsi di ogni commit, ma la decisione dovrebbe essere disaccoppiata in assenza di una buona ragione. O almeno è così che la vedo io.
UNO

3

Ignorato. Ti consigliamo di far sì che gli utenti del repository siano in grado di ricostruirli comunque, eliminando la complessità di essere sicuri che i documenti siano sempre sincronizzati. Non c'è motivo di non avere i manufatti raccolti in un unico posto se si desidera avere tutto in un posto e non è necessario costruire nulla. Tuttavia i repository di origine non sono davvero un buon posto per farlo, anche se la complessità fa più male della maggior parte dei luoghi.


2

Dipende dal processo di distribuzione. Ma il commit di file generati in un repository è un'eccezione e, se possibile, dovrebbe essere evitato. Se puoi rispondere a entrambe le seguenti domande con , il check-in nei tuoi documenti potrebbe essere un'opzione valida:

  • I documenti sono un requisito per la produzione?
  • Il tuo sistema di distribuzione non dispone degli strumenti necessari per creare i documenti?

Se queste condizioni sono vere, probabilmente si sta eseguendo la distribuzione con un sistema legacy o un sistema con vincoli di sicurezza speciali. In alternativa, è possibile eseguire il commit dei file generati in un ramo di rilascio e mantenere pulito il ramo principale.


1
Il commit dei file generati in un ramo di rilascio non funziona in tutte le situazioni, ma ce ne sono molti, specialmente con siti Web statici costruiti da markdown, dove questa è un'ottima soluzione. Lo faccio abbastanza spesso da aver creato uno strumento speciale per generare facilmente tali commit durante il processo di compilazione.
Curt J. Sampson,

2

Dipende. Se quei documenti:

  • Deve essere parte del repository, come il readme.md, quindi è preferibile tenerli nel repository git. Perché può essere complicato gestire tali situazioni in modo automatizzato.

  • Se non hai un modo automatizzato per costruirli e aggiornarli, come un sistema CI, ed è destinato a essere visto per il pubblico in generale, è preferibile tenerli nel repository git.

  • Richiede MOLTO tempo per costruirli, quindi è giustificabile mantenerli.

  • Sono pensati per essere visti per il pubblico generale (come il manuale dell'utente) e ci vuole molto tempo per costruirlo, mentre i tuoi documenti precedenti diventano inaccessibili (offline), quindi è giustificabile tenerli nel repository git.

  • Sono pensati per essere visti per il pubblico in generale e devono mostrare una storia dei suoi cambiamenti / evoluzione, potrebbe essere più facile mantenere impegnate le versioni precedenti dei documenti e costruire / impegnare quella nuova collegata alla precedente. Giustificabile.

  • Ha un motivo specifico accettato per il commit di tutta la squadra, quindi è giustificabile tenerli nel repository git. (Non conosciamo il tuo contesto, tu e il tuo team lo sapete)

In qualsiasi altro scenario, dovrebbe essere tranquillamente ignorato.

Tuttavia, se è giustificabile tenerli nel repository git, potrebbe essere un segno di un altro problema più grande che la tua squadra sta affrontando. (Non avere un sistema CI o simili, orribili problemi di prestazioni, affrontare i tempi di fermo durante la costruzione, ecc.)


1

Come principio di controllo della versione, solo "oggetti primari" dovrebbero essere archiviati in un repository, non "oggetti derivati".

Ci sono eccezioni alla regola: vale a dire, quando ci sono consumatori del repository che richiedono gli oggetti derivati ​​e ci si aspetta ragionevolmente che non dispongano degli strumenti necessari per generarli. Altre considerazioni pesano, come è la quantità di materiale ingombrante? (Sarebbe meglio per il progetto far sì che tutti gli utenti avessero gli strumenti?)

Un esempio estremo di questo è un progetto che implementa un raro linguaggio di programmazione il cui compilatore è scritto in quel linguaggio stesso (esempi ben noti includono Ocaml o Haskell). Se nel repository è presente solo il codice sorgente del compilatore, nessuno può crearlo; non hanno una versione compilata del compilatore che possono essere eseguiti sulla macchina virtuale, in modo che possano compilare il codice sorgente di quel compilatore. Inoltre, le ultime funzionalità del linguaggio vengono immediatamente utilizzate nell'origine del compilatore stesso, in modo che per compilarlo sia sempre necessario avvicinarsi all'ultima versione del compilatore: un eseguibile del compilatore di un mese ottenuto separatamente non compilerà il codice corrente perché il codice utilizza funzionalità linguistiche che non esistevano un mese fa. In questa situazione, la versione compilata del compilatore deve quasi sicuramente essere controllata nel repository e mantenuta aggiornata.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.