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 initVisão geral do diretório
gitvalores personalizados do ambiente do diretório
git initgit initvs.git cloneRepositórios vazios do
git initTemplates 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 initTransforma 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.
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.gitPrimeiro, 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.gitem outro lugarSeu 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 commitCrie um novo repositório bare
git init --bare /path/to/repo.gitCrie 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