2011-05-12 10 views
5

Il problema è che dopo l'eliminazione e il push del ramo non viene perso per sempre ed è ancora nel repository. Ho eliminato un ramo con una grande quantità di file inutili, ma finché è ancora da qualche parte nel repository git, la durata del comando git clone è troppo grande.Come eliminare un ramo e tutti gli oggetti a esso referenziati

Per ora solo il modo che vedo è quello di eliminare l'intero repository e ricrearlo ma senza branch inutili.

risposta

4

Credo che git gc --prune=now farà ciò che si desidera: eliminare i file non necessari dal repository.

Per impostazione predefinita, git gc rimuove i commit non raggiungibili da più di 2 settimane, quindi è sufficiente aggiungere --prune=now.

+0

+1 git gc pulirà effettivamente gli oggetti liberi nel repository. Tuttavia, il problema con il clone che impiega molto tempo è legato alle vecchie revisioni dei file che risiedono ancora nel repository. – ralphtheninja

+0

Grazie per la prugna, modificherò la mia domanda. Non sono d'accordo, se i commit che sono stati cancellati sono irraggiungibili (che sembra essere il caso), verranno cancellati da 'prune' – CharlesB

+1

Il motivo è il reflog, che contiene riferimenti agli stati dei tuoi rami anche se i rami sono già cancellati. –

3

è necessario rimuovere completamente i file utilizzando git filter-branch

http://git-scm.com/docs/git-filter-branch

Si può fare un sacco di magia con questo comando, il seguente rimuoverà il nome del file da tutti i commit:

git filter-branch --tree-filter 'rm -f filename' HEAD 
+0

solo curioso: se il commit è sparito, poiché il ramo è cancellato, non è 'git gc' rimuovendolo? – CharlesB

+0

@CharlesB: Sì, ma potresti voler usare git gc --prune = now per sbarazzarti di tutti i dati. Tuttavia, questo è solo dati per il repository locale e non ha alcun effetto durante la clonazione. Sembra che questa domanda sia doppia. – ralphtheninja

Problemi correlati