Tracciamento dell'intero progetto rispetto ai soli file modificati

0

Recentemente ho aderito a una società SaaS che finora non utilizzava la traccia di controllo del codice sorgente e manteneva il loro sviluppo, invece di lavorare separatamente sulle proprie parti della base di un determinato client. Nel tentativo di contribuire e di contribuire positivamente, ho iniziato a usare git per i miei contributi e voglio portare altri (in futuro, tutti) dei miei colleghi nel VCS.

La mia domanda deriva dalla natura complessa degli ambienti di sviluppo in cui scriviamo e dalle best practice per la versione che la controlla. Darò una descrizione del set-up e poi presenterò le domande specifiche in seguito.

Set-up:

Il business si basa su Archibus . Distribuiamo, supportiamo e personalizziamo l'installazione di ogni cliente. Ogni cliente ha una coppia di server dedicata, che ospita tutto il codice di produzione e il codice di pre-produzione in fase di test. Oltre a questo, ospitiamo la nostra copia e ogni sviluppatore accedendo tramite un client desktop remoto o eseguendo una copia del server a livello locale per semplificare lo sviluppo.

In questo ho cercato di iniettare alcuni VCS spostando l'onere delle modifiche al codice dall'interno della mia installazione locale a una directory di sviluppo dove gestisco il mio stack di transpilation npm: scrivo nella mia directory e poi eseguo uno script PowerShell che chiama npm run build e quindi sposta tutti i file necessari nelle cartelle corrette all'interno del server.

Per spostare le modifiche alla produzione, ho creato un ramo vuoto che vive nel server e tiene traccia solo del codice transpiled. Quando una funzione o una correzione sono pronte, le impegno e le taggano, la spingo al mio repository e poi le modifiche a prod-test (e alla produzione successiva), senza portare con sé alcun avanzo dal nodo o dal mio sistema di sviluppo.

Questo ha funzionato fino a quando non mi è stato assegnato lo sviluppo di un nuovo modulo Java all'interno della complessa struttura interna stessa, che includerà necessariamente modifiche a un gran numero di file discreti su più sottodirectory, inclusi più jar. Ora non posso semplicemente scrivere il codice altrove e poi spostarlo quando è necessario, a meno che non sia disposto a scrivere alcune aggiunte estremamente fastidiose al mio script di PowerShell e rielaborare le dipendenze di Eclipse.

Ma se voglio tenere traccia dell'intera cartella del progetto, questo dovrebbe tracciare oltre 30k file nelle directory da 4.5k, seduti a circa 1 gig. Inoltre, perderei la facilità di tracciare il mio codice ES6 separatamente dal codice ES4 transpiled pronto per la produzione.

Domande:

  • Quali sono le migliori pratiche per la gestione di basi di codice grandi come questo?
    • Devo mordere il proiettile e includere l'intera struttura nel mio repository?
    • Espandere la complessità dei miei script per spostare solo ciò che deve essere spostato quando necessario?

Se c'è dell'altro che devo aggiungere, faccelo sapere. Questo è il mio primo grande progetto nel software, e mi sento ansioso di farlo bene.

    
posta Noah Bogart 17.07.2017 - 20:28
fonte

1 risposta

4

Do I need to bite the bullet and just include the entire structure in my repository?

Git supporta repository molto grandi senza problemi. Puoi decidere quali parti del tuo grande progetto vuoi includere nel repository, o semplicemente fare il tutto.

Do I expand the complexity of my scripts to move only what needs to be moved when necessary?

Penso che dovresti separare meglio la nozione di un file sorgente da un file preparato. Dovresti avere uno script di compilazione (idealmente gestito da un CI automatico) che controlla il tuo repository di origine, crea il software (cioè compila / bundle / transpile), esegue qualsiasi test automatico e pubblica da qualche parte il pacchetto software. Idealmente, la forma compilata dell'app è non monitorata da Git perché Git non è realmente progettato per la memorizzazione di artefatti di build. Le risorse di build dovrebbero essere nel tuo file .gitignore . Invece dovresti pubblicare le tue risorse di build in un repository come Nexus .

Al momento della distribuzione, estrai gli artefatti di distribuzione dal tuo repository di risorse e li inserisci nelle cartelle giuste utilizzando uno script di distribuzione.

    
risposta data 17.07.2017 - 22:03
fonte

Leggi altre domande sui tag