git init

Esta página vai explorar o comando git init a fundo. No final desta página, você vai ser informado sobre a funcionalidade principal e o conjunto de recursos estendidos do git init. Esta exploração inclui:

  • opções e uso do git init
  • visão geral do diretório.git
  •  personalizar valores do ambiente do diretório git init
  • git init vs. git clone
  • repositórios vazios do git init
  • templates do git init

O comando git init cria um novo repositório do Git. Ele pode ser usado para converter um projeto existente e não versionado em um repositório do Git ou inicializar um novo repositório vazio. A maioria dos outros comandos Git não está disponível fora de um repositório inicializado, portanto, este costuma ser o primeiro comando que você executa em um novo projeto.

A execução dogit init cria um subdiretório .git no diretório de trabalho atual, que contém todos os metadados Git necessários para o novo repositório. Esses metadados incluem subdiretórios para objetos, referências e arquivos de template. Também é criado um arquivo HEAD que aponta para o commit em uso no momento.

Além do diretório .git, no diretório raiz do projeto, um projeto existente permanece inalterado (diferente do SVN, o Git não requer um subdiretório .git em cada subdiretório).

Por padrão, o git init vai inicializar a configuração do Git para o caminho do subdiretório .git. O caminho do subdiretório pode ser modificado e personalizado se você quiser que ele seja hospedado em outro lugar. Você pode definir a variável de ambiente $GIT_DIR como um caminho personalizado e o git init vai inicializar os arquivos de configuração do Git lá. Além disso, você pode usar o argumento --separate-git-dir para o mesmo resultado. Um caso de uso comum para um subdiretório separado .git é manter os "dotfiles" de configuração do sistema (.bashrc, .vimrc etc.) no diretório inicial, mantendo a pasta .git em outro lugar.
 

Uso

Comparado ao SVN, o comando git init é uma maneira muito fácil de criar novos projetos controlados por versão. O Git não exige que você crie um repositório, importe arquivos e faça check-out de uma cópia de trabalho. Além disso, o Git não requer privilégios de servidor ou administrador pré-existentes. Tudo o que você precisa fazer é entrar no subdiretório do projeto e executar o git init, e você vai ter um repositório do Git com funcionalidade total.

git init

Transforma o diretório atual em um repositório do Git. Isso adiciona um subdiretório .git ao diretório atual e possibilita iniciar a gravação de revisões do projeto.

git init <diretório>

Cria um repositório do Git vazio no diretório especificado. A execução deste comando vai criar um novo subdiretório chamado contendo nada além do subdiretório .git.

Se você já executou o git init em um diretório de projeto e ele contém um subdiretório .git, você pode executar outra vez o git init com segurança no mesmo diretório de projeto. Isso não vai substituir a configuração do .git.

git init versus. git clone

Uma rápida observação: o git init e o git clone podem ser confundidos com facilidade. No nível superficial, ambos podem ser usados para "inicializar um novo repositório do Git." Contudo, o git clone é dependente do git init. O git clone é usado para criar uma cópia de um repositório existente. No nível interno, o git clone primeiro chama o git init para criar um novo repositório. Em seguida, copia os dados do repositório existente e faz check-out de um novo conjunto de arquivos de trabalho. Saiba mais na página do git clone.

Repositórios vazios --- git init --bare

git init --bare <diretório>

Inicializa um repositório do Git vazio, mas omite o diretório de trabalho. Repositórios compartilhados sempre devem ser criados com a flag--bare (confira a discussão abaixo). Por convenção, os repositórios inicializados com a flag--bare terminam em .git. Por exemplo, a versão vazia de um repositório chamado meu-projeto deve ser armazenada em um diretório chamado meu-projeto.git.

A flag --bare cria um repositório que não tem um diretório ativo, tornando impossível editar arquivos e confirmar alterações nesse repositório. Você cria um repositório vazio para git push e git pull, mas nunca faz o commit direto para ele. Repositórios centrais sempre devem ser criados como repositórios vazios, porque enviar ramificações por push a um repositório não vazio tem o potencial de sobrescrever alterações. Imagine o --bare como uma maneira de marcar um repositório como um recurso de armazenamento, em oposição a um ambiente de desenvolvimento. Isso significa que, para quase todos os fluxos de trabalho do Git, o repositório central é vazio e os repositórios locais dos desenvolvedores são não vazios.

Tutorial do Git: Repositórios Vazios

O caso de uso mais comum para o  git init --vazio é criar um repositório central remoto:

ssh <user>@<host> cd path/above/repo git init --bare meu-projeto.git

Primeiro, você faz o SSH no servidor em que o repositório central vai estar. Em seguida, você navega para onde quiser armazenar o projeto. Por fim, você usa a flag--bare para criar um repositório de armazenamento central. Os desenvolvedores clonam meu-projeto.git para criar uma cópia local na máquina de desenvolvimento.

templates git init

git init <diretório> --template=<template_directory>

Inicializa um novo repositório do Git e copia arquivos do diretório  <diretório_template> para o repositório.

Os templates permitem inicializar um novo repositório com um subdiretório .git predefinido. Você pode configurar um template para ter diretórios e arquivos padrão que vão ser copiados para o novo repositório do subdiretório .git. Os templates do Git padrão costumam residir em um diretório /usr/share/git-core/templates, mas podem estar em um caminho diferente na máquina local.

Os templates padrão são uma boa referência e exemplo de como utilizar os recursos do template. Um recurso poderoso dos templates exibidos nos templates padrão é a configuração do Git Hook. Você pode criar um template com Git Hooks predefinidos e inicializar os novos repositórios do Git com hooks comuns prontos para uso. Saiba mais sobre Git Hooks na página Git Hook.

Configuração

Todas as configurações de git init <diretório> levam um argumento <diretório>. Se você informa o <diretório>, o comando é executado dentro do diretório. Se esse diretório não existir, ele vai ser criado. Além das opções e configurações já discutidas, o Git init tem outras opções de linha de comando, a lista completa é esta:

-Q

--QUIET

Imprime apenas mensagens de "nível crítico", erros e avisos. Todas as outras saídas são silenciadas.

--BARE

Cria um repositório vazio. (Confira a seção "Repositórios Vazios" acima.)

--TEMPLATE=<TEMPLATEDIRECTORY>

Especifica o diretório no qual os templates vão ser usados. (Confira a seção "Templates Git Init" acima.)

--SEPARATE-GIT-DIR=<GIT DIR>

Cria um arquivo de texto contendo o caminho para o <git dir>. Este arquivo atua como um link para o diretório .git. Isso é útil se você quiser armazenar o diretório .git em um local separado ou na unidade dos arquivos de trabalho do projeto. Alguns casos de uso comuns para o --separate-git-dir são:

  • Para manter a configuração do sistema "dotfiles" (.bashrc, .vimrc, etc.) no diretório inicial, mantendo a pasta .git em outro lugar
  • O histórico do Git aumentou muito em tamanho de disco e você precisa movê-lo para outro local para uma unidade de alta capacidade separada
  • Você quer que um projeto Git fique em um diretório acessível ao público, como `www:root`
     

Você pode chamar o git init --separate-git-dir em um repositório existente e o .git dir vai ser movido para o caminho <git dir>.

--SHARED[=(FALSE|TRUE|UMASK|GROUP|ALL|WORLD|EVERYBODY|0XXX)] 

Define as permissões de acesso para o novo repositório. Isso especifica quais usuários e grupos que usam permissões no nível Unix têm permissão para enviar push/pull ao repositório.

Exemplos

Crie um novo repositório do Git para uma base de código existente

cd /path/to/code \
git init \
git add . \
git commit

Crie um novo repositório bare

git init --bare /path/to/repo.git

Crie um template git init e inicialize um novo repositório do Git a partir do template

mkdir -p /path/to/template \
echo "Hello World" >> /absolute/path/to/template/README \
git init /new/repo/path --template=/absolute/path/to/template \
cd /new/repo/path \
cat /new/repo/path/README

Pronto para aprender sobre o Git?

Experimente este tutorial interativo.

Comece agora mesmo