Git: criando repositórios remotos

Git

Há um tempo, eu mostrei aqui como usar as funcionalidades básicas do Git para controlar versões de softwares. Hoje mostrarei como criar repositórios remotos via SSH.

É possível usar repositórios remotos por meio do GitHub ou do Google Code, mas às vezes queremos ter um repositório remoto para uso próprio, que seja fechado, sem que ninguém mais possa ter acesso a ele.

Para isso, você precisará ter acesso a um servidor Linux (ou outro Unix-Like) com servidor SSH, o qual hospedará seus repositórios.


 Servidor Remoto para o repositório Git

Acesse seu servidor via SSH, escolha um diretório para armazenar seus repositórios e cria sub-diretórios para cada repositório. Para isso, faça o seguinte:

Suponha que você escolheu o diretório ~/git (diretório git na sua home) e que vamos criar um repositório chamado exemplo1. Logo, executaremos os seguintes comandos:

mkdir ~/git
cd ~/git
mkdir exemplo1.git
cd exemplo1.git

Com o diretório criado, devemos defini-lo como um repositório remoto, que apenas armazenará arquivos, sem diretório de trabalho (working directory):

git --bare init

Com isso, você já tem um repositório remoto, ao qual pode empurrar código (comando push) e de onde pode fazer clone.



Repositório Git Local

Na sua máquina local, você deve fazer o seguinte:

mkdir meu-repositorio
cd meu-repositorio
git init .
touch README
git add .
git commit -a -m "primeiro commit"

Até aqui nada que não sabíamos: apenas criamos um diretório para ser nosso repositório e o definimos como um repositório. Também criamos um arquivo README, colocando-o no repositório e fazendo um commit.

Agora é necessário especificar que será usado um repositório remoto, onde podemos fazer push dos arquivos. Para isso, usamos o seguinte comando:

git remote add origin ssh://usuario@servidor.com/~/git/examplo1.git

Altere o comando com seu nome de usuário e endereço do servidor. Caso tenha alterado o caminho ao arquivo exemplo1.git, altere-o nesse comando também.

Após isso, basta empurrar os arquivos ao servidor remoto:

git push origin master

A partir daí, você pode fazer alterações e commitá-las, sempre lembrando de fazer um push após os commits:

git push

Caso queira clonar o repositório em outra máquina, basta clonar o repositório, conforme abaixo:

git clone ssh://usuario@servidor/~/git/exemplo1.git

Simples, né? :)

Dicas de Livros

Seguem abaixo alguns links de bons livros sobre Linux:

Linux – Guia Prático – Carlos Morimoto
Certificação Linux Lpi – Nível 1 Exames 101 e 102 – Steven Pritchard, Bruno Pessanha
Certificação Linux Lpi: Nível 2 Exames 201 e 202 – Steven Pritchard, Bruno Gomes Pessanha, Nicolai Langfeldt
Comandos do Linux – Prático e Didático – Marco Agisander Lunardi
Programação Shell Linux – 5º Ed. 2005 – Julio Cezar Neves

The following two tabs change content below.
Graduado em Ciência da Computação, pela Universidade Federal do Paraná (UFPR), é desenvolvedor de software desde 2008, com foco em Desenvolvimento Web com PHP.
  • Pingback: Criando um repositorio Git | Ramon RDM()

  • rr

    Boa tarde, parabens pelo blog..Mas fiquei com duvidas ao criar o seguinte ambiente
    Servidor windows2008 criei um pasta c:\sistemas\Fontes, nas estações de trabalho criei a mesma estrutura
    – Nao uso ssh
    – Ao criar o repo no servidor como bare, ao realizar qual procedimento via linha de comano ocorre erro: this operation must be run in work tree;

    – Ao criar o repo no servidor como nao-bare, ao realizar qual procedimento push via linha de comando ocorre erro: refusing to update checked out branch:refs/heads/master…etc:

    Quais os passo correto pra enviar arquivos pro servidor e puxar os arquivos do servidor para minha pasta de trabalho? vlw

  • Christopher Dopona

    Opa, o meu esta dando um erro quando faço git push origin master

    Ele da esse erro:

    Counting objects: 3, done.
    Writing objects: 100% (3/3), 223 bytes | 0 bytes/s, done.
    Total 3 (delta 0), reused 0 (delta 0)
    remote: error: insufficient permission for adding an object to repository database ./objects
    remote: fatal: failed to write object
    error: unpack failed: unpack-objects abnormal exit
    To ssh://[email protected]/~/git/exemplo1.git
    ! [remote rejected] master -> master (unpacker error)
    error: failed to push some refs to ‘ssh://[email protected]/~/git/exemplo1.git’

    • Olá. Verifique se o usuário dpsystems tem permissão para escrever na pasta ~/git e no arquivo ~/git/exemplo1.git

      • Christopher Dopona

        Acho que deu certo, não deu mais o erro, agora aonde deve aparecer os arquivos comitados no servidor remoto, tem apenas algumas pastas BRANCHES CONFIG DESCRIPTION HEAD HOOKS INFO OBJECTS REFS

        • O repositório não é a árvore de arquivos. Ele é um conjunto de diffs e outros dados que montam a árvore e todo o histórico de modificações.
          A árvore real de arquivos só existe ao clonar o repositório.

          • Christopher Dopona

            Então nao consigo ver os arquivos que cometei no meu servidor remoto?

            • Você precisa clonar o projeto em outra pasta. A pasta central do repositório não tem a árvore de arquivos.

              • Christopher Dopona

                kkk desculpa te atrapalhar, se tiver alguma meio de conversar com você skype por exemplo, pois isso e tudo mt novo para mim, agora esta dando esse erro quando dou git pula

                here is no tracking information for the current branch.

                Please specify which branch you want to merge with.

                See git-pull(1) for details.

                git pull

                If you wish to set tracking information for this branch you can do so with:

                git branch –set-upstream-to=origin/ master

                • você deve estar em um branch diferente. Tente “git pull origin master” para rodar o pull do branch principal.
                  Se estiver em outro branch, preste atenção qual é e se fará pull desse branch ou do master

  • Olá, eu tenho uma dúvida. Eu tenho um projeto local (onde já uso git) e já fiz transferência dos arquivos via ftp para o servidor (que não está com git configurado). Agora queria sincronizá-los com o git, de forma que quando eu der um merge em master, o projeto do servidor seja atualizado. O processo se dá da mesma forma que descreveu acima?