2015-11-25 15 views
5

Titolo in fondo.Elimina la cronologia nel repository locale invece di clonarla di nuovo con --depth 1

Ho solo mescolato alcune cose con il mio .gitignore e gonfiato la mia dir. .git su> 100mb (è un repository con 100commits totali come ..).

Quindi sono un ragazzo pigro e mi chiedevo se sarebbe stato possibile cancellare la mia cronologia. Non voglio rebase di qualcosa o cose, voglio solo rimpicciolire la mia dimensione della directory .git.

Quando non c'è modo di fare questo, mi piacerebbe solo il mio repository git clone --depth 1 per ottenere lo stesso effetto.

+0

Perché non basta avviare un nuovo repository con i file che si desidera conservare? – Thilo

+0

Vedere anche http: // stackoverflow.it/questions/33906391/how-can-i-re-init-my-git-repo # comment55575386_33906391 – Thilo

+0

@Thilo Non vedo come la domanda collegata risponda alla mia domanda. Non voglio reinizializzare il mio repository e molto meno 'push -f' nulla – Brettetete

risposta

1

questi sono due obiettivi contrastanti:

  • eliminare la storia implica un nuovo repo (rm -Rf .git, git init .): questo significa che avete per forza spingere il vostro nuovo repo locale con un git push --force, distruggendo il la storia sul repo remoto e,

  • mantenendo il pronti contro termine a distanza intatta mezzi che lavorano a livello locale con git clone --depth 1, che è safe to do since Git 2.0, as I have documented here (es. si può spingere di nuovo ad un repo remoto da un locale superficiale repo)

Il secondo approccio sembra il più sicuro per:

  • preservare repository remoto
  • ottimizzare lo spazio su disco localmente

Nota: per un repo locale con la sua storia completa, git gc e git repack da soli non sono abbastanza per ridurli davvero la dimensione di una cartella .git.
Vedere "git gc --aggressive vs git repack".

git gc 
git repack -Ad  # kills in-pack garbage 
git prune   # kills loose garbage 

(Non sarebbe fare molto su un repo appena clonato, che sarebbe solo efficace su un repo locale, avete lavorato per qualche tempo) Inoltre, se l'avete fatto nelle operazioni passate come git filter-branch, la vostra La cartella .git manterrà comunque una cartella come .git/refs/original/ che è necessario eliminare se si desidera ridurre le dimensioni di .git/.


AFAIU la domanda originale e come voglio fare è proprio senza rimuovere la cartella .git, semplicemente rimuovendo copia locale dei dati di log git per fare il suo stato identico a quello stato dopo git clone --depth 1

Vedere "Converting git repository to shallow?"

si può provare:

cd /my/repo 
git show-ref -s HEAD > .git/shallow 
git reflog expire --expire=0 
git prune 
git prune-packed 
+0

AFAIU la domanda originale e come voglio farlo è senza rimuovere la cartella .git, rimuovendo solo la copia locale dei dati del log git per rendere il suo stato ** identico allo stato dopo 'git clone --depth 1' ** . Finora 'gc' e' repack' hanno ridotto la cartella .git da 1.6G a 0.5G mentre con il nuovo clone è <50Mb. E 'prune' in qualche modo lo ha restituito a 1.6G. –

+0

@int_ua Ho modificato la risposta – VonC

+0

Ok, sembra che 'git pull --depth 1' funzioni su un semplice repository clone e il pacchetto di oggetti 1.6Gb in quello principale sia in qualche modo una differenza memorizzata perché c'è un diverso telecomando memorizzato come "upstream" –

Problemi correlati