Modifica: a differenza di alcune domande simili come Spostare un repository SVN multi-GB su Git o /programming/540535/managing-large-binary-files-with-git Il mio scenario non prevede diversi sottoprogetti che può essere facilmente convertito in sottomodelli git, né pochi file binari molto grandi che sono adatti per git-annex. È un singolo repository in cui i binari sono la suite di test che è strettamente accoppiata al codice sorgente principale della stessa revisione, proprio come se fossero risorse di compilazione come la grafica.
Sto studiando il passaggio da un vecchio repository di codice di medie / grandi dimensioni (50 utenti, revisioni 60k, cronologia 80Gb, copia di lavoro 2Gb) da svn. Man mano che il numero di utenti è cresciuto, c'è molto churn nel trunk e le funzionalità sono spesso distribuite su più commit rendendo difficile la revisione del codice. Inoltre, senza la diramazione non c'è modo di "eliminare" il codice errato, le recensioni possono essere fatte solo dopo che sono state impegnate nel trunk. Sto studiando alternative. Speravo che potessimo passare a git, ma sto avendo dei problemi.
Il problema con il repository corrente per quanto riguarda git è la dimensione. C'è molto vecchio innesto lì dentro e pulirlo con --filter-branch quando si converte in git può ridurlo di dimensioni di un ordine di grandezza, a circa 5-10 GB. Questo è ancora troppo grande. Il motivo principale della grande dimensione del repository è che ci sono molti documenti binari che vengono immessi nei test. Questi file variano tra .5mb e 30mb e ce ne sono centinaia. Hanno anche molti cambiamenti. Ho esaminato i sottomoduli, git-annex ecc., Ma avere i test in un sottomodulo sembra sbagliato, così come avere l'allegato per molti file per i quali si desidera la cronologia completa.
Quindi la natura distribuita di git è davvero ciò che mi impedisce di adottarlo. Non mi interessa molto la distribuzione, voglio solo la ramificazione economica e le potenti funzionalità di fusione. Come suppongo facciano il 99,9% degli utenti git, useremo un repository centrale benedetto e nudo.
Non sono sicuro di capire perché ogni utente deve avere una cronologia locale completa quando usa git? Se il flusso di lavoro non è decentralizzato, cosa stanno facendo i dati sui dischi degli utenti? So che nelle ultime versioni di git è possibile utilizzare un clone superficiale con solo cronologia recente. La mia domanda è: è fattibile farlo come modalità operativa standard per un'intera squadra? Git può essere configurato per essere sempre superficiale in modo da poter avere una cronologia completa solo centralmente, ma gli utenti di default hanno solo 1000 giri di cronologia? L'opzione ovviamente sarebbe quella di convertire solo 1000 giri in git e mantenere il repository svn per l'archeologia. In quello scenario, tuttavia, incontreremmo di nuovo lo stesso problema dopo le successive migliaia di revisioni ai documenti di prova.
- Che cosa è un buon best practice per l'utilizzo di git con grandi repos contenenti molti file binari che non vuole la storia per? La maggior parte delle migliori pratiche e tutorial sembra evitare questo caso. Risolvono il problema di pochi enormi binari o propongono di abbandonare completamente i binari.
- È poco profondo clonazione utilizzabile come una modalità normale di funzionamento o è un "hack"?
- I sottomoduli potrebbero essere utilizzati per il codice in cui si ha una stretta dipendenza tra la revisione del sorgente principale e la revisione del sottomodulo (come nelle dipendenze binarie in fase di compilazione o in una suite di test unitari)?
- Quanto è grande "troppo grande" per un repository git (locale)? Dovremmo evitare di passare se possiamo arrivare a 4 GB? 2GB?