{"id":1016,"date":"2022-09-05T16:59:09","date_gmt":"2022-09-05T14:59:09","guid":{"rendered":"https:\/\/alessandromasciadri.com\/?p=1016"},"modified":"2022-09-08T13:45:48","modified_gmt":"2022-09-08T11:45:48","slug":"come-pulire-la-cartella-git-e-ridurre-lo-spazio-del-repository","status":"publish","type":"post","link":"https:\/\/alessandromasciadri.com\/come-pulire-la-cartella-git-e-ridurre-lo-spazio-del-repository\/","title":{"rendered":"Come pulire la cartella .git e ridurre lo spazio del repository"},"content":{"rendered":"\t\t<div data-akihiro-type=\"ama-post\" data-akihiro-id=\"1016\" class=\"akihiro akihiro-1016\" data-akihiro-post-type=\"post\">\n\t\t\t\t<div class=\"akihiro-element akihiro-element-6520fc3 e-flex e-con-boxed e-con e-parent\" data-id=\"6520fc3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"akihiro-element akihiro-element-53dae71 akihiro-widget akihiro-widget-text-editor\" data-id=\"53dae71\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Nel caso in un repository git si stiano gestendo file di grandi dimensioni, come per esempio immagini e video, una loro rimozione in un successivo commit non aiuter\u00e0 nella riduzione dello spazio occupato.<\/p><p>Siccome git \u00e8 progettato con la finalit\u00e0 di tenere traccia della storia dei file caricati, questi, in caso di eliminazione non verranno completamente eliminati.<\/p><p>Nella seguente procedura vedremo quindi come eliminare completamente i file dal proprio repository.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-2947d20 akihiro-widget akihiro-widget-heading\" data-id=\"2947d20\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Trovare i file pi\u00f9 ingombranti nel repository<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-4f2c20c akihiro-widget akihiro-widget-text-editor\" data-id=\"4f2c20c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Utilizziamo il seguente comando per trovare e visualizzare in ordine di dimensione i 10 file che occupano pi\u00f9 spazio nel repository. Dove eseguiamo il tail possiamo eventualmente modificare il numero di file che vogliamo elencare.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-be02343 akihiro-widget akihiro-widget-code-highlight\" data-id=\"be02343\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>git rev-list --objects --all | grep -f <(git verify-pack -v .git\/objects\/pack\/*.idx| sort -k 3 -n | cut -f 1 -d \" \" | tail -10)<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"akihiro-element akihiro-element-45ea8dc e-flex e-con-boxed e-con e-parent\" data-id=\"45ea8dc\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"akihiro-element akihiro-element-3cd3cbf akihiro-widget akihiro-widget-heading\" data-id=\"3cd3cbf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Pulire l'history dai file di grandi dimensione<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-07e17e2 akihiro-widget akihiro-widget-text-editor\" data-id=\"07e17e2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Per ogni commit, il comando filter-branch riscrive l&#8217;history del repository con un filtro. Il seguente comando cancella le immagini (x. es .jpg, .png, .gif) che sono presenti nell&#8217;history.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-4474da6 akihiro-widget akihiro-widget-code-highlight\" data-id=\"4474da6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch \"assets\/*.jpg\" \"assets\/*.png\" \"assets\/*.gif\"' --prune-empty --tag-name-filter cat -- --all<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-f2c640f akihiro-widget akihiro-widget-text-editor\" data-id=\"f2c640f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Questo comando forza (-f) l&#8217;applicazione del filtro (la stringa indicata dopo &#8211;index-filter), rimuove i commit vuoti (&#8211;prune-empty) riscritti dal filtro e sovrascrive il nome del tag (&#8211;tag-name-filter cat) nel nuovo commit per la lista dei commit object (&#8211; &#8211;all)<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"akihiro-element akihiro-element-51fdff4 e-flex e-con-boxed e-con e-parent\" data-id=\"51fdff4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"akihiro-element akihiro-element-88b6d96 akihiro-widget akihiro-widget-heading\" data-id=\"88b6d96\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Ripulire il repository<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-521685d akihiro-widget akihiro-widget-text-editor\" data-id=\"521685d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Rimuoviamo i log e gli oggetti per i vecchi commit che non sono pi\u00f9 referenziati nel commit che abbiamo riscritto.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-4e67a66 akihiro-widget akihiro-widget-code-highlight\" data-id=\"4e67a66\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>rm -Rf .git\/refs\/original\nrm -Rf .git\/logs\/\ngit gc --aggressive --prune=now<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"akihiro-element akihiro-element-0c56de6 e-flex e-con-boxed e-con e-parent\" data-id=\"0c56de6\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"akihiro-element akihiro-element-31e10ca akihiro-widget akihiro-widget-heading\" data-id=\"31e10ca\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Aggiornare il repository remoto<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-ee9a37f akihiro-widget akihiro-widget-text-editor\" data-id=\"ee9a37f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Non resta che eseguire il push delle modifiche al server remoto di git.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-2b6b419 akihiro-widget akihiro-widget-code-highlight\" data-id=\"2b6b419\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>git push origin --force --all\ngit push origin --force --tags<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Nel caso in un repository git si stiano gestendo file di grandi dimensioni, come per esempio immagini e video, una loro rimozione in un successivo commit non aiuter\u00e0 nella riduzione dello spazio occupato. Siccome git \u00e8 progettato con la finalit\u00e0 di tenere traccia della storia dei file caricati, questi, in caso di eliminazione non verranno [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[35],"class_list":["post-1016","post","type-post","status-publish","format-standard","hentry","category-programmazione","tag-git"],"_links":{"self":[{"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/posts\/1016","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/comments?post=1016"}],"version-history":[{"count":10,"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/posts\/1016\/revisions"}],"predecessor-version":[{"id":1026,"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/posts\/1016\/revisions\/1026"}],"wp:attachment":[{"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/media?parent=1016"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/categories?post=1016"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/tags?post=1016"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}