Preciso criar um repositório Git central, mas estou um pouco confuso ...
Eu criei um repositório vazio (no meu servidor git, máquina 2) com:
$ mkdir test_repo
$ git --bare init
Agora, preciso enviar arquivos do meu repositório local (máquina 1) para o repositório vazio (máquina 2). Eu tenho acesso à máquina 2 pelo SSH. O problema é que acho que não entendo o conceito de repositório vazio ...
Qual é a maneira correta de armazenar meu código no repositório vazio? Como posso enviar alterações do meu repositório local para o repositório bare?
É a maneira correta de ter um repositório central para ter um repositório vazio?
Estou um pouco confuso com esse assunto. Por favor, me dê uma pista sobre isso.
--shared
opçãoinit
se planeja fazer com que outras pessoas enviem este repositório. Ele adiciona automaticamente as permissões de gravação do grupo para o repositório - ligaçãoEstou adicionando esta resposta porque, depois de chegar aqui (com a mesma pergunta), nenhuma das respostas realmente descreve todas as etapas necessárias necessárias para ir do nada a um repositório remoto (totalmente) totalmente utilizável.
Nota: este exemplo usa caminhos locais para a localização do repositório vazio, mas outros protocolos git (como SSH indicado pelo OP) devem funcionar bem.
Tentei adicionar algumas notas ao longo do caminho para aqueles menos familiarizados com o git.
1. Inicialize o repositório simples ...
Isso cria uma pasta (repo.git) e a preenche com arquivos git representando um repo git. Tal como está, este repositório é inútil - não tem commits e, mais importante, não tem ramos . Embora você possa clonar este repositório, não pode retirá-lo.
Em seguida, precisamos criar uma pasta de trabalho. Existem algumas maneiras de fazer isso, dependendo se você possui arquivos existentes.
2a Crie uma nova pasta de trabalho (sem arquivos existentes) clonando o repositório vazio
Este comando só funcionará se
/path/to/work
não existir ou for uma pasta vazia. Tome nota do aviso - nesta fase, você ainda não tem nada útil. Se vocêcd /path/to/work
executargit status
, obterá algo como:mas isso é mentira. Você não está realmente no ramo
master
(porquegit branch
não retorna nada) e, até agora, não há confirmações.Em seguida, copie / mova / crie alguns arquivos na pasta de trabalho, adicione-os ao git e crie o primeiro commit.
Os
git config
comandos são necessários apenas se você ainda não disse ao git quem você é. Observe que se você executar agoragit branch
, verá amaster
ramificação listada. Agora executegit status
:Isso também é enganador - o upstream não "foi", apenas não foi criado ainda e
git branch --unset-upstream
não ajudará. Mas tudo bem, agora que temos nosso primeiro commit, podemos enviar por push e master será criado no repositório simples.Neste ponto, temos um repositório bare totalmente funcional que pode ser clonado em outro lugar em uma ramificação principal, bem como uma cópia de trabalho local que pode ser puxada e empurrada.
2b. Criar uma pasta de trabalho a partir de arquivos existentes Se você já possui uma pasta com arquivos (para não poder cloná-la), pode inicializar um novo repositório git, adicionar um primeiro commit e vinculá-lo ao repositório bare posteriormente.
Nesse ponto, temos nosso primeiro commit e um branch master local, que precisamos transformar em um branch upstream rastreado remotamente.
Observe a
-u
flag no git push para definir o (novo) ramo upstream rastreado. Assim como antes, agora temos um repositório vazio totalmente funcional que pode ser clonado em outro lugar em uma ramificação principal, bem como uma cópia de trabalho local que pode ser puxada e empurrada.Tudo isso pode parecer óbvio para alguns, mas o git me confunde na melhor das hipóteses (as mensagens de erro e status realmente precisam de retrabalho) - espero que isso ajude outros.
fonte
Respondendo às suas perguntas uma por uma:
Repositório simples é aquele que não possui árvore de trabalho . Isso significa que todo o seu conteúdo é o que você tem no
.git
diretório.Você pode apenas
commit
descobrir o repositóriopush
usando o clone local. Não possui uma árvore de trabalho, portanto, não há arquivos modificados, nenhuma alteração.Ter um repositório central é a única maneira de ter um
bare
repositório.fonte
Você também pode pedir ao git para criar um diretório para você:
fonte
A prática geral é ter o repositório central para o qual você envia como repositório simples.
Se você possui experiência em SVN, pode relacionar um repositório SVN a um repositório bare Git. Ele não possui os arquivos no repositório na forma original. Considerando que seu repositório local terá os arquivos que formam seu "código" além disso.
Você precisa adicionar um controle remoto ao repo bare do seu repo local e enviar seu "código" a ele.
Será algo como:
fonte
git remote add central <url>
, no caso do SSH, isso incluiria o caminho também? por exemplogit remote add central ssh://user@server/home/user/repo.git
Isso deve ser suficiente:
Consulte para obter mais detalhes " GIT: como atualizo meu repo bare? ".
Notas:
origin
' para a referência remota de repositório simples.git push --tags origin
para isso.fonte
É bom verificar se o código que você enviou realmente foi confirmado.
Você pode obter um log de alterações em um repositório vazio, definindo explicitamente o caminho usando a opção --relative.
Isso mostrará as alterações confirmadas como se este fosse um repositório regular do git.
fonte
Baseado nas respostas de Mark Longair e Roboprog:
se versão git> = 1.8
Ou:
se versão git <1.8
fonte
O sinalizador --bare cria um repositório que não possui um diretório ativo. O repositório simples é o repositório central e você não pode editar (armazenar) códigos aqui para evitar o erro de mesclagem.
Por exemplo, quando você adiciona um arquivo ao seu repositório local (máquina 1) e o envia ao repositório vazio, não pode ver o arquivo no repositório vazio, pois ele está sempre 'vazio'. No entanto, você realmente envia algo para o repositório e pode vê-lo inexplicavelmente ao clonar outro repositório em seu servidor (máquina 2).
Tanto o repositório local na máquina 1 quanto o repositório 'copy' na máquina 2 não são necessários. relacionamento entre repositórios vazios e não vazios
O blog irá ajudá-lo a entendê-lo. https://www.atlassian.com/git/tutorials/setting-up-a-repository
fonte
Você pode executar os seguintes comandos para inicializar seu repositório local
Você deve trabalhar no seu projeto a partir do repositório local e usar o servidor como repositório central.
Você também pode seguir este artigo, que explica todos os aspectos da criação e manutenção de um repositório Git. Git para iniciantes
fonte