Eu tenho um repositório Git local. Gostaria de disponibilizá-lo em um servidor remoto habilitado para ssh. Como eu faço isso?
git
installation
Nips
fonte
fonte
git push origin master
falhar com o erro "repositório não encontrado", tentegit update-server-info
no lado remoto, onde você fezgit init --bare
git update-server-info
mas estou recebendo o errofatal: Unable to look up Volumes (port 9418) (nodename nor servname provided, or not known)
Para configurar inicialmente qualquer servidor Git, você precisa exportar um repositório existente para um novo repositório bare - um repositório que não contém um diretório ativo. Isso geralmente é simples de fazer. Para clonar seu repositório para criar um novo repositório vazio, execute o comando clone com a
--bare
opção Por convenção, os diretórios bare repository terminam da seguinte.git
maneira:Este comando pega o repositório Git sozinho, sem um diretório ativo, e cria um diretório especificamente para ele sozinho.
Agora que você possui uma cópia simples do seu repositório, tudo o que você precisa fazer é colocá-lo em um servidor e configurar seus protocolos. Digamos que você configurou um servidor chamado
git.example.com
ao qual tem acesso SSH e deseja armazenar todos os seus repositórios Git no/opt/git
diretório Você pode configurar seu novo repositório, copiando-o sobre:Nesse ponto, outros usuários que têm acesso SSH ao mesmo servidor que possui acesso de leitura ao
/opt/git
diretório podem clonar seu repositório executandoSe um usuário fizer SSH em um servidor e tiver acesso de gravação ao
/opt/git/my_project.git
diretório, ele também terá acesso automático por push. O Git adicionará automaticamente permissões de gravação de grupo a um repositório corretamente se você executar o comando git init com a--shared
opçãoÉ muito fácil pegar um repositório Git, criar uma versão simples e colocá-lo em um servidor ao qual você e seus colaboradores tenham acesso SSH. Agora você está pronto para colaborar no mesmo projeto.
fonte
scp
solução funciona IMO melhor na prática do que oinit --bare
. Ainda parece um truque feio, embora primeiro seja clonado localmente e depois copie para o servidor ... gostaria que o git tivesse um comando para fazê-lo de uma só vez.--shared
funcionou para mim. Eu me pergunto o que acontece se você usargit init --shared
sem fazer--bare
uma ...scp
que para um controle remoto funcione melhor se o controle remoto não suportargit init --bare
(como foi o caso para mim com o git 1.5.5, 2008). Eu acho que isso deve funcionar mesmo que o controle remoto não tenha nenhum git.Uma observação para quem criou a cópia local no Windows e deseja criar um repositório remoto correspondente em um sistema de linha Unix, onde os arquivos de texto obtêm terminações LF em clones adicionais de desenvolvedores em sistemas semelhantes ao Unix, mas terminações CRLF no Windows.
Se você criou seu repositório do Windows antes de configurar a tradução de final de linha , há um problema. A configuração padrão do Git é sem tradução, portanto, seu conjunto de trabalho usa CRLF, mas seu repositório (ou seja, os dados armazenados em .git) também salvou os arquivos como CRLF.
Quando você pressiona o controle remoto, os arquivos salvos são copiados como estão, nenhuma conversão de final de linha ocorre. (A conversão de final de linha ocorre quando os arquivos são confirmados em um repositório, não quando os repositórios são enviados por push). Você acaba com o CRLF no seu repositório do tipo Unix, que não é o que você deseja.
Para obter o LF no repositório remoto, é necessário garantir que o LF esteja no repositório local primeiro, normalizando novamente o repositório do Windows . Isso não terá efeito visível no seu conjunto de trabalho do Windows, que ainda possui terminações CRLF; no entanto, quando você pressiona para o controle remoto, o controle remoto obtém o LF corretamente.
Não tenho certeza se existe uma maneira fácil de dizer quais terminações de linha você tem no seu repositório do Windows - acho que você pode testá-la definindo core.autocrlf = false e clonando (se o repositório tiver terminações LF, o clone terá LF também).
fonte
Há uma diferença interessante entre as duas soluções populares acima:
Se você criar o repositório vazio como este:
e depois
Então o git define a configuração em 'original_repo' com este relacionamento:
com o último como o controle remoto a montante. E o controle remoto upstream não possui outros controles remotos em sua configuração.
No entanto, se você fizer o contrário:
então 'my_remote.git' termina com sua configuração com 'origin' apontando para 'original_repo' como um controle remoto, com um remote.origin.url igual ao caminho do diretório local, o que pode não ser apropriado se for movido para um servidor.
Embora seja fácil se livrar dessa referência "remota" mais tarde, se não for apropriado, 'original_repo' ainda precisa ser configurado para apontar para 'my_remote.git' como um remoto remoto (ou para onde quer que vá) para ser compartilhado). Portanto, tecnicamente, você pode chegar ao mesmo resultado com mais algumas etapas na abordagem nº 2. Porém, o nº 1 parece uma abordagem mais direta para a criação de um "repositório compartilhado básico" originário de um local, apropriado para a migração para um servidor, com menos etapas envolvidas. Acho que depende do papel que você deseja que o repo remoto desempenhe. (E sim, isso está em conflito com a documentação aqui .)
Advertência: eu aprendi o que foi dito acima (neste artigo, no início de agosto de 2019), fazendo um teste no meu sistema local com um repo real e, em seguida, fazendo uma comparação arquivo a arquivo entre os resultados. Mas! Ainda estou aprendendo, então poderia haver uma maneira mais correta. Mas meus testes me ajudaram a concluir que o nº 1 é o meu método preferido atualmente.
fonte
Você pode criar um repositório bare git com o seguinte código:
Uma opção para ter um repositório git remoto é usar o protocolo SSH:
Para obter mais informações, consulte a referência: Git no servidor - os protocolos
fonte
Você precisa criar um diretório em um servidor remoto. Em seguida, use o comando "git init" para configurá-lo como um repositório. Isso deve ser feito para cada novo projeto que você possui (cada nova pasta)
Supondo que você já configurou e usou o git usando chaves ssh, escrevi um pequeno script Python, que, quando executado a partir de um diretório ativo, configurará um controle remoto e inicializará o diretório como um repositório git. Obviamente, você terá que editar o script (apenas uma vez) para informar o servidor e o caminho raiz para todos os repositórios.
Confira aqui - https://github.com/skbobade/ocgi
fonte
Normalmente, você pode configurar um repositório git usando o
init
comandoNo seu caso, já existe um repositório disponível em um controle remoto. Dependendo de como você acessa seu repositório remoto (com nome de usuário dentro do URL ou uma chave ssh que lida com a verificação), use apenas o
clone
comando:Também há outras maneiras de clonar o repositório. Dessa forma, você poderá chamá-lo se tiver uma configuração de chave ssh na sua máquina que verifique se você está puxando seu repositório. Existem outras combinações de URL, se você quiser incluir sua senha e nome de usuário para fazer login no seu repositório remoto.
fonte