When cloning a Git repository, there is an option to limit the amount of history your clone will have. If you set the parameter to –depth 1, you get the least amount of history, and you create a shallow clone.

The git clone man page says that you cannot push your commits if you have a shallow clone. Apparently, there is no error message when you actually push your commits, so it is a situation that might bring problems in the repository in the future.

Lacking more details on whether pushing commits from shallow clones is bad for the repository, let’s measure if there are any gains when someone opts for shallow clones.

Module (gnome-2-26) Full clone (MB) Shallow clone (MB) evolution 204 189 gtk+ 193 172 nautilus 139 108 gnome-games 127 120 gnome-applets 110 98 gnome-user-docs 108 102 evolution-data-server 84 77 anjuta 76 66 libgweather 69 68 gnome-panel 68 60 ekiga 61 49 dasher 58 49 orca 55 47 gnome-utils 53 48 gnome-icon-theme 51 49 gedit 49 45 epiphany 48 42 gnome-control-center 46 40 gdm 43 38 glib 42 37 gnome-system-tools 33 29 gnome-media 33 30 totem 31 27 gnome-power-manager 31 27 gnome-backgrounds 31 30 brasero 31 29 metacity 29 27 gnome-desktop 28 24 tomboy 27 25 seahorse 24 22 gnome-terminal 23 21 gnome-session 23 20 gucharmap 22 19 gnome-vfs 22 19 glade3 21 19 gconf 21 20 eog 21 18 gcalctool 19 17 libgnomeui 18 15 gtkhtml 18 16 evince 18 15 gnome-themes 17 16 cheese 17 15 file-roller 16 14 empathy 16 15 gok 14 13 gtksourceview 13 12 gnome-keyring 13 12 gnome-doc-utils 13 13 bug-buddy 13 11 zenity 12 11 yelp 12 11 sound-juicer 12 11 libgnome 12 11 gvfs 12 9.9 gnome-system-monitor 12 11 deskbar-applet 12 9.5 libbonobo 11 8.8 gnome-settings-daemon 11 11 gnome-devel-docs 11 11 evolution-exchange 9.9 9.3 gnome-screensaver 9 8.3 vte 8.7 7.5 libbonoboui 8.7 7.4 libgtop 8.4 6.9 libgnomeprintui 8.4 7.1 gconf-editor 8.4 7.9 libgnomeprint 8.1 7 vinagre 7.3 6 libwnck 6.6 5.9 accerciser 6.6 6.3 gtk-engines 6.4 5.4 sabayon 5.8 5.2 vino 5.7 5.3 gnome-nettool 5.3 4.9 mousetweaks 5 4.7 totem-pl-parser 4.6 4.5 at-spi 4.5 3.9 libgnomecanvas 4.3 3.7 atk 4.2 3.7 gnome-netstatus 4.1 3.8 devhelp 3.9 3.2 gdl 3.5 3.2 gnome-mag 3.2 2.9 gnome-menus 3 2.6 hamster-applet 2.8 2.2 gnome-user-share 2.6 2.5 evolution-mapi 2.2 2.1 libgnomekbd 1.8 1.7 alacarte 1.6 1.4 pessulus 1.5 1.3 evolution-webcal 1.4 1.3 swfdec-gnome 1.1 0.94 Total (MB) 2625.6 2349.24 Time (min) 52 37

The git repositories for all modules of gnome-2-26 weight 2.6GB while their shallow clones are 2.3GB. There is a difference of less than 300MB.

Comparatively, if it takes 52 minutes to clone all GNOME 2.26 repositories, their shallow clones save 15 minutes.The speed that was reported by git clone was about 1.4MB/s in this experiment.

Cloning is bound by both your bandwidth and your CPU (especially when resolving deltas). It would be interesting to evaluate if there would be benefits (on git.gnome.org load, speed of cloning) by having daily tarballs of anonymous clones of the modules, so that one can download using HTTP and then simply add their account details and update with git pull –rebase.

With the above information, it makes sense to avoid making shallow clones, especially when you intend to push your changes. Instead, one would dedicate at least 2.6GB for the repositories, and keep them.

intltool-manage-vcs was used to retrieve the repositories.

Update: The GNOME 2.26 modules (2.6GB in size for all their repositories), compresses down to 1.6GB (.tar.bz2).