W3docs

git init

Saiba sobre a importância, o uso, o diretório de templates e as opções do comando git init, e como distinguir git init e git clone.

O que o git init faz

git init cria um repositório Git novo e vazio — ou reinicializa um existente. É quase sempre o primeiro comando Git que você executa em um projeto, e é o que transforma uma pasta comum em algo que o Git pode rastrear.

Ao executá-lo, é criado um único subdiretório oculto chamado .git dentro do seu projeto. Esse diretório contém tudo o que o Git precisa para gerenciar seu histórico: o banco de dados de objetos, referências (branches e tags), o ponteiro HEAD, configuração e uma cópia dos arquivos de template padrão. Seus arquivos de projeto permanecem exatamente onde estão — o Git nunca os move ou modifica durante o init.

Esta página aborda como executar git init de diferentes maneiras, a diferença entre um repositório regular e um bare, o diretório de templates e a lista completa de opções. Se, em vez disso, você quiser uma cópia de um repositório que já existe em outro lugar, use git clone em vez de git init. Para uma visão geral de alto nível, consulte O que é Git.

Inicializando um repositório

A forma mais simples de começar a versionar um projeto é entrar no diretório com cd e executar o comando sem argumentos:

cd my-project
git init

O Git exibe uma confirmação e cria o subdiretório .git:

Initialized empty Git repository in /home/user/my-project/.git/

Você também pode passar um nome de diretório. O Git cria esse diretório (se ainda não existir) e coloca o novo repositório lá:

git init my-project

O repositório está vazio nesse ponto — ainda não há commits. Os próximos passos normalmente são adicionar arquivos ao stage com git add e registrá-los com git commit. Você pode verificar o estado do seu novo repositório a qualquer momento com git status.

Reinicializando um repositório existente

Executar git init dentro de um diretório que já possui um subdiretório .git é seguro. O Git não apaga nem sobrescreve seu histórico ou configuração — ele simplesmente reaplicará quaisquer arquivos de template ausentes e exibirá:

Reinitialized existing Git repository in /home/user/my-project/.git/

Isso é ocasionalmente útil para incorporar novos arquivos de um diretório de templates atualizado.

Repositórios bare

Um repositório bare é criado com a flag --bare. Ele contém o histórico do Git, mas não possui diretório de trabalho — não há arquivos com checkout para editar, portanto não é possível fazer commits diretamente nele.

git init --bare project.git

Repositórios bare existem para ser um local central e compartilhado para onde outros clones fazem push e de onde fazem pull. Fazer push para um repositório não-bare pode sobrescrever os arquivos que alguém está editando ativamente em seu diretório de trabalho, por isso repositórios centrais/remotos são quase sempre bare. Por convenção, eles são nomeados com o sufixo .git (por exemplo, project.git).

A diferença é visível na estrutura. Um repositório regular oculta os arquivos do Git dentro de uma pasta .git:

my-project/
├── .git/ Git's data lives here
└── (your files)

Um repositório bare coloca esse mesmo conteúdo diretamente no nível superior — não há uma árvore de trabalho envolvendo-o:

project.git/
├── HEAD
├── config
├── description
├── hooks/
├── info/
├── objects/
└── refs/

Bare

Definindo o nome do branch inicial

Historicamente, o Git nomeava o primeiro branch como master. Você pode escolher um nome diferente no momento do init com --initial-branch (ou sua forma abreviada -b):

git init --initial-branch=main

Para tornar isso o padrão para cada novo repositório, sem precisar passar a flag, defina-o uma vez na sua configuração global:

git config --global init.defaultBranch main

Consulte git config para mais informações sobre configurações globais.

O diretório de templates

Quando o Git cria o subdiretório .git, ele o inicializa a partir de um diretório de templates — um conjunto de arquivos (como hooks de exemplo e um arquivo info/exclude) que são copiados para cada novo repositório. O Git escolhe o template a usar a partir do primeiro destes que estiver definido, na seguinte ordem:

  • o caminho fornecido com a opção --template,
  • a variável de ambiente $GIT_TEMPLATE_DIR,
  • a variável de configuração init.templateDir,
  • o padrão embutido, geralmente /usr/share/git-core/templates.

Os templates padrão servem principalmente como exemplos (por exemplo, os hooks de exemplo são desabilitados por padrão). Ao fornecer seu próprio diretório de templates, você pode ter arquivos e pastas — como um conjunto padrão de hooks — copiados automaticamente para cada repositório que você inicializar.

Referência de opções

git init aceita um argumento opcional <directory>. Se você omiti-lo, o comando é executado no diretório atual; se você fornecer um caminho que não existe, o Git o cria. As flags mais úteis estão abaixo.

FlagDescrição
-q, --quietExibe apenas erros e avisos; toda outra saída é suprimida.
--bareCria um repositório bare (sem diretório de trabalho).
--template=<template-directory>Especifica o diretório de templates do qual copiar arquivos ao criar o repositório.
--separate-git-dir=<git-dir>Armazena os dados reais do Git em <git-dir> e deixa um pequeno arquivo de texto .git apontando para ele. Em um repositório existente, o diretório .git é movido para o novo caminho.
--shared[=(false|true|umask|group|all|world|everybody|0xxx)]Configura o repositório para ser compartilhado entre vários usuários, controlando as permissões de arquivo do grupo.
-b <name>, --initial-branch=<name>Define o nome do branch inicial no novo repositório.

git init vs. git clone

Esses dois comandos criam um repositório local, mas partem de pontos opostos:

  • git init transforma uma pasta local existente em um repositório novo e vazio, sem histórico.
  • git clone baixa um repositório remoto existente — com todo seu histórico, branches e arquivos — e configura uma conexão de volta para esse remoto.

Use git init quando estiver iniciando um projeto do zero em sua máquina; use git clone quando estiver ingressando em um projeto que já existe em um servidor como o GitHub.

Prática

Prática
Quais são as funções e opções do comando 'git init'?
Quais são as funções e opções do comando 'git init'?
Was this page helpful?