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
Perché non basta avviare un nuovo repository con i file che si desidera conservare? – Thilo
Vedere anche http: // stackoverflow.it/questions/33906391/how-can-i-re-init-my-git-repo # comment55575386_33906391 – Thilo
@Thilo Non vedo come la domanda collegata risponda alla mia domanda. Non voglio reinizializzare il mio repository e molto meno 'push -f' nulla – Brettetete