2009-12-08 22 views
6

Ho un repository in cui vivono molti file binari di grandi dimensioni. È possibile impostare git per far sì che mantenga solo l'ultimo n numero di commit? Come voglio mantenere solo le ultime 5 copie di file in questa storia del repository? Ma mi piacerebbe molto non farlo manualmente ogni 5 commit?Mantenere un certo numero di commit nella cronologia usando git

+1

Ne dubito, ma mi piace l'idea. –

risposta

3

Utilizzare "git rebase --interactive". Segna i primi cinque commit come "pick" e il resto come "squash".

+0

quando viene estratto da altri repository che dovrebbe anche sincronizzare, sì? –

+0

Le directory clonate dovranno estrarre la cronologia completa completa ogni volta che si cambia la cronologia, quindi un 'git fetch' da un repository clonato potrebbe richiedere del tempo - ma sì, si sincronizzeranno. – Bombe

2

Kindasorta. git clone --depth N ti permetterà di fare un "clone superficiale" del repository. Tuttavia, non puoi eseguire il push/clone/fetch da questo, quindi non è molto utile come sviluppatore.

+0

lo so, ma non voglio conservare più di 5 copie nei repository, non solo nei cloni. –

+0

Questo non è possibile, dovrai riscrivere il repository come suggerisce @Dustin. Ti suggerisco di rivalutare come vuoi memorizzare questi file enormi. Forse Git non è la soluzione migliore. –

4

L'unico modo per farlo è quello di riscrivere periodicamente il repository.

Un commit contiene un hash dei metadati di commit, le informazioni di commit, i genitori del commit e l'albero che si sta impegnando. Non è possibile cambiare qualcosa in passato senza influenzare il presente.

3

Come ha detto Dustin, l'unico modo per farlo è quello di riscrivere periodicamente il repository. Git non ha sicuramente un supporto "incorporato" per questo, né è probabile che abbia tale supporto in tempi brevi (il design fondamentale del genere di cose preclude questa funzionalità). Ciò significa che se vuoi farlo, dovrai farlo manualmente.

Se si vuole fare un tentativo, la risposta a this question mostra un esempio di come questo può essere fatto usando git filter-branch.

Problemi correlati