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
  • valores personalizados 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 do git 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á. Ou 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. O Git também não requer privilégios de servidor ou administrador preexistentes. Tudo o que você precisa fazer é entrar no subdiretório do projeto por cd 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. Esse processo adiciona um subdiretório .git ao diretório atual e possibilita iniciar a gravação de revisões do projeto.

git init <directory>

Cria um repositório do Git vazio no diretório especificado. Executar esse comando vai criar um novo subdiretório que contém apenas o 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. Essa ação 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 <directory>

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 marcação --bare cria um repositório que não tem um diretório ativo, tornando impossível editar arquivos e fazer commit de 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. Ou seja: 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 --bare é criar um repositório central remoto:

ssh <user>@<host> cd path/above/repo git init --bare my-project.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 <directory> --template=<template_directory>

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

Os templates permitem inicializar um novo repositório com um subdiretório .git . Você pode configurar um template para ter diretórios e arquivos padrão que vão ser copiados para o subdiretório .git do novo repositório . 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 levam um argumento . Se você informa o , 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=

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

--SEPARATE-GIT-DIR=

Cria um arquivo de texto contendo o caminho para . Este arquivo atua como um link para o diretório .git . É útil se você quer armazenar o diretório .git em um local ou unidade separada dos arquivos de trabalho do seu projeto. Alguns casos de uso comuns para --separate-git-dir são:

  • Para manter os "dotfiles" (.bashrc, .vimrc, etc.) da configuração do sistema no diretório inicial, mantendo a pasta .git em outro lugar
  • Seu histórico do Git cresceu muito em tamanho de disco e precisa ser movido para outro lugar com uma unidade separada de alta capacidade
  • O melhor é ter o projeto Git em um diretório que pode ser acessado em modo 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 .

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

Define as permissões de acesso para o novo repositório. Assim, 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(a) para aprender Git?

Tente este tutorial interativo.

Comece agora mesmo