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, 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. A execução desse comando cria um novo subdiretório chamado <directory> contendo 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 "pull.ff".

git init versus. git clone

Uma rápida observação: é fácil confundir o git init e o git clone. 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 checkout 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.

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 < template_directory > 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

git init <directory> --template=<template_directory>

Todas as configurações de git init levam um argumento <directory>. Se você informa o , o comando é executado dentro dele. 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 do qual os templates vão ser usados. (Consulte a seção "Templates Git Init" acima.)

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

Cria um arquivo de texto contendo o caminho para <git dir>. 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 <git dir>.

--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

Recomendado para você

Blog do Bitbucket

Caminho de aprendizagem de DevOps

Saiba mais sobre o Git

Encontre mais guias e recursos de Git neste hub.