GIT: archivio compresso zip/tar della tua repository

In genere creo tutti i miei progetti con un repository GIT dietro. Quando, però, si tratta poi di linkare o rilasciare il progetto vorrei un archivio compresso ZIP in modo che tutto sia il più leggero e piccolo possibile. GIT fornisce diversi metodi per raggiungere tale scopo. Se si dispone di un repo GIT con numerose modifiche e possibili binari allora si potrebbe avere una cartella che sia molto più grande dell’essenziale.

git archive processo

I tuo clienti non si preoccupano della storia di come questo progetto sia cresciuto, ma vogliono solo l’ultima versione di tutti i file. Questo esempio contiene un’immagine JPEG peso di 9 MB, per un totale di 23.2 MB, ma 23.2 MB è ancora più del doppio della dimensione necessaria. Ancora più divertente: se si tenta di comprimere l’intera cartella, si aggiunge anche tutta la roba git nascosta producendo un archivio ZIP con ben 22.2 MB!

Il comando per produrre una “fotografia” zip di un ramo specifico è costruito in GIT stesso, eh chi lo sapeva!

Sinossi

git archive [--format=<fmt>] [--list] [--prefix=<prefix>/] [<extra>]
	      [-o <file> | --output=<file>] [--worktree-attributes]
	      [--remote=<repo> [--exec=<git-upload-archive>]] <tree-ish>
	      [<path>...]

Descrizione

Archive crea un archivio del formato specificato che contiene la struttura ad albero, e lo scrive fuori sullo standard output. Se —prefix viene specificato è la stringa che verrà anteposta ai nomi dei file in archivio.

Git archive si comporta diversamente quando dato un ID di albero rispetto a quando dato un ID di commit o tag. Nel primo caso l’ora corrente viene utilizzata come la data di modifica di ogni file nell’archivio. In quest’ultimo caso l’orario come registrato nell’oggetto di riferimento commit viene usato al posto commit. Inoltre l’ID del commit è memorizzato in un’intestazione globale estesa se viene utilizzato il formato tar; può essere estratto usando git get-tar-commit-id. Nei file ZIP viene memorizzato come il commento del file.

Senza il parametro –output l’archivio viene fuori sul terminale, che non è molto utile. Quindi specifichiamo il nome del file di output.

Il comando archive supporta diversi formati per l’archiviazione, mostrati dall’ opzione –list.

  • tar
  • tgz
  • tar.gz
  • zip

Naturalmente vogliamo usare zip, non ci sentiamo come il geek Unix di oggi che deve tar.gz-are tutto. Se non si specifica un formato, ma specifica il file di output git indovina il formato dal nome del file. Senza un estensione del file che ricade tar.

Così il comando minimale è:

git archive -o master.zip -9 HEAD

Invece di HEAD è possibile utilizzare anche altri indicatori di commit, come master o un SHA di commit, master.zip ovviamente è il nome + path del file compresso, mentre -9 è il livello di compressione (da 0 a 9).  Il risultato è molto più piccolo dei 23 MB con cui abbiamo iniziato:

git archive - archivio compresso
La metà della dimensione non è male come risultato, c’è comunque da considerare che in questo esempio abbiamo riempito la repository di immagini JPEG incomprimibile.

Conclusione

Il comando git archive consente di produrre un file ZIP che contiene solo una versione specifica della repo. Molto pratico davvero.

Related Posts

iOS Continuos Integration con Xcode 9

git logo

GIT: guida rapida al software di backup

Zip&Unzip

Cos’è Github? Come si usa?

Si prega di attivare i Javascript! / Please turn on Javascript!

Javaskripta ko calu karem! / Bitte schalten Sie Javascript!

S'il vous plaît activer Javascript! / Por favor, active Javascript!

Qing dakai JavaScript! / Qing dakai JavaScript!

Пожалуйста включите JavaScript! / Silakan aktifkan Javascript!