Se você vem de um mundo Windows, está acostumado a usar ferramentas como zip ou rar, que compactam coleções de arquivos. Na tradição típica do Unix de fazer uma coisa e fazer uma coisa bem, você tende a ter duas utilidades diferentes; uma ferramenta de compactação e um formato de arquivo. As pessoas usam essas duas ferramentas juntas para fornecer a mesma funcionalidade que o zip ou o rar fornecem.
Existem vários formatos de compressão diferentes; os comuns usados no Linux atualmente são o gzip (às vezes conhecido como zlib) e o mais novo, com melhor desempenho, o bzip2. Infelizmente o bzip2 usa mais CPU e memória para fornecer as maiores taxas de compressão. Você pode usar essas ferramentas para compactar qualquer arquivo e por arquivos de convenção compactados por um desses formatos é .gz e .bz2. Você pode usar gzip e bzip2 para compactar e gunzip e bunzip2 para descomprimir esses formatos.
Existem também vários tipos diferentes de formatos de arquivo disponíveis, incluindo cpio, ar e tar, mas as pessoas tendem a usar somente o tar. Eles permitem que você pegue vários arquivos e os armazene em um único arquivo. Eles também podem incluir informações de caminho e permissão. Você pode criar e descompactar um arquivo tar usando o comando tar. Você pode ouvir essas operações chamadas "tarring" e "untarring". (O nome do comando vem de um encurtamento do Tape ARchive. O tar era uma melhoria no formato ar em que você poderia usá-lo para abranger várias fitas físicas para backups).
# tar -cf archive.tar list of files to include
Isto irá criar (-c) e arquivar em um arquivo -f chamado archive.tar. (.tar é a extensão da convenção para arquivos tar). Agora você deve ter um único arquivo que contém cinco arquivos ("list", "of", "files", "to" e "include"). Se você der ao tar um diretório, ele irá recursar para esse diretório e armazenar tudo dentro dele.
# tar -xf archive.tar
# tar -xf archive.tar list of files
Isto irá extrair (-x) o archive.tar criado anteriormente. Você pode extrair apenas os arquivos que deseja do arquivo, listando-os no final da linha de comando. Em nosso exemplo, a segunda linha extrairia "list", "of", "file", mas não "to" e "include". Você também pode usar
# tar -tf archive.tar
para obter uma lista do conteúdo antes de extraí-lo.
Agora, você pode combinar essas duas ferramentas para replicar a funcionalidade do zip:
# tar -cf archive.tar directory
# gzip archive.tar
Agora você terá um arquivo archive.tar.gz. Você pode extraí-lo usando:
# gunzip archive.tar.gz
# tar -xf archive.tar
Podemos usar pipes para nos salvar com um arquivo intermediário.tar:
# tar -cf - directory | gzip > archive.tar.gz
# gunzip < archive.tar.gz | tar -xf -
Você pode usar - com a opção -f para especificar stdin ou stdout (tar sabe qual baseado no contexto).
Podemos fazer um pouco melhor, porque, em uma leve quebra aparente da idéia de "um trabalho bem", o tar tem a capacidade de comprimir sua saída e descompactar sua entrada usando o argumento -z (eu digo aparente, porque ainda usa a linha de comando gzip e gunzip nos bastidores)
# tar -czf archive.tar.gz directory
# tar -xzf archive.tar.gz
Para usar o bzip2 ao invés do gzip, use bzip2, bunzip2 e -j ao invés de gzip, gunzip e -z respectivamente (tar -cjf archive.tar.bz2). Algumas versões do tar podem detectar um arquivo de arquivos bzip2 com o uso de -z e fazer a coisa certa, mas provavelmente vale a pena adquirir o hábito de ser explícito.
Voltando ao seu problema específico. git archive pode criar um arquivo tar ou zip. Por padrão, ele cria um arquivo tar.
# git archive master | gzip > v-1.25.tar.gz
Isso criaria um arquivo tar compactado. Como vimos acima, podemos extrair isso usando:
# tar -xzf v-1.25.tar.gz
Você também pode usar:
# git archive --format=zip master > v-1.25.zip
# unzip v-1.25.zip
Mais informações: