Sembra che il mio progetto stia diventando sempre più grande con ogni tipo commit/push
. C'è un modo per ripulire la mia cartella git?
Sembra che il mio progetto stia diventando sempre più grande con ogni tipo commit/push
. C'è un modo per ripulire la mia cartella git?
Risposte:
Non sono sicuro di quello che vuoi. Prima di tutto, ovviamente ogni volta che commetti / spingi la directory diventerà un po 'più grande, dal momento che deve memorizzare ciascuno di quei commit aggiuntivi.
Tuttavia, probabilmente si desidera git gc
che "ripulirà i file non necessari e ottimizzerà il repository locale" ( pagina del manuale ).
Un altro comando possibilmente rilevante è git clean
che eliminerà i file non tracciati dalla tua struttura ( pagina del manuale ).
WARNING
Il comando come scritto sopra da @Kalle rimuoverà OGNI > UNTRACKED <FILE E DIRECTORY ENTRO IL TUO ROOT DI GIT , non solo "file elencati in .gitignore". Tutto ciò che non viene monitorato da Git, indipendentemente dal fatto che sia elencato o meno, .gitignore
verrà cancellato. git clean -dfX
(nota il caso sul X
) rimuoverà solo gli articoli che hanno una regola applicabile in .gitignore
. Per favore segui questo avvertimento: non correre mai git clean
senza eseguirlo in modalità interattiva, con -i
invece di -f
, o almeno facendo una corsa a secco prima - -n
e poi di nuovo con -f
.
Correre:
git remote prune origin
Elimina tutti i rami di tracciamento non aggiornati che sono già stati rimossi origin
ma che sono ancora disponibili localmente in remotes/origin
.
git gc --auto
' G arbage C ollezione' - piste di pulizia compiti (impacchi revisioni, rimuove perdono / oggetti inaccessibili). La --auto
bandiera prima determina se è necessario qualche lavoro ed esce senza fare nulla in caso contrario.
Uno scenario in cui il vostro repo git otterrà seriamente più grande con ogni commit è quella in cui si sta commettendo file binari che si genera con regolarità. La loro memorizzazione non sarà così efficiente come file di testo .
Un altro è quello in cui si ha un numero enorme di file all'interno di un repository (che è un limite di git ) anziché diversi sottorepos ( gestiti come sottomoduli ).
In questo articolo su git space , AlBlue menziona:
Nota che Git (e Hg e altri DVCS) soffrono di un problema in cui i file binari (di grandi dimensioni) vengono archiviati, quindi eliminati, poiché verranno comunque visualizzati nel repository e occuperanno spazio, anche se non sono aggiornati .
Se hai archiviati file binari di grandi dimensioni nel tuo repository git, puoi considerare:
git filter-branch
(avviso: questo riscriverà la cronologia, il che è male se hai già inviato il tuo repository e se altri ne hanno estratto)Come ho detto in " Quali sono i limiti dei file in Git (numero e dimensioni)? ", Il più recente (2015, 5 anni dopo questa risposta) Git LFS di GitHub è un modo per gestire quei file di grandi dimensioni (memorizzandoli al di fuori del Git repository).
si si, git gc
è la soluzione, naturalmente,
e localmente: puoi semplicemente eliminare il repository locale e clonarlo di nuovo,
i secondi che aspetti che quell'enorme git ed esterni vengano elaborati vengono raccolti in lunghi minuti in cui vengono raccolti in ore di tempo inefficiente trascorso,
Crea un nuovo repository (interamente, non solo un ramo) da zero , inclusa l'unica versione recente dei file, naturalmente perderai tutta la cronologia,
ma quando nel mondo del codice non è il momento di diventare sentimentali, non ha senso trascinare lungo tutti i 5 anni di codice ogni commit o diff, puoi comunque conservare il vecchio git ed esterni da qualche parte, se diventi nostalgico:]
ma a un certo punto devi davvero muoverti:]
la tua squadra ti ringrazierà!
L'esecuzione di questo comando è estremamente pericolosa, ma ridurrà il repository cancellando tutti i file di recupero / backup di git:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
Cancellerà tutti i file che Git utilizza per ripristinare il repository da un comando errato, ad esempio, se lo hai fatto git reset --hard
, di solito puoi recuperare i file persi. Ma se lo fai git reset --hard
prima del git reflog expire...
comando, allora hai perso tutto. Ora, la tua unica speranza è quella di utilizzare uno strumento che analizzi il tuo file system e provi a recuperare i file cancellati, se non sono stati sovrascritti.
git clean -d -f -i
è il modo migliore per farlo.
Ciò contribuirà a pulire in modo più controllato.
-i
sta per interattivo.
git clean
non è per ripulire il repository tanto quanto ripulire la directory. Per gli utenti che copiano / incollano alla cieca, attenzione; questo rimuove i file / le directory non tracciati che potresti effettivamente desiderare localmente.
Non so se lo ridurrà, ma dopo l'esecuzione git clean
, lo faccio spesso git repack -ad
, il che riduce il numero di file pack.
git gc
processo, quindi non è necessario eseguirlo separatamente