Git - Criar Operação
Neste capítulo, veremos como criar um repositório Git remoto; a partir de agora, vamos nos referir a ele como Git Server. Precisamos de um servidor Git para permitir a colaboração em equipe.
Criar novo usuário
# add new group
[[email protected] ~]# groupadd dev
# add new user
[[email protected] ~]# useradd -G devs -d /home/gituser -m -s /bin/bash gituser
# change password
[[email protected] ~]# passwd gituser
O comando acima produzirá o seguinte resultado.
Changing password for user gituser.
New password:
Retype new password:
passwd: all authentication token updated successfully.
Criar um repositório básico
Vamos inicializar um novo repositório usando init comando seguido por --bareopção. Ele inicializa o repositório sem um diretório de trabalho. Por convenção, o repositório vazio deve ser nomeado como.git.
[[email protected] ~]$ pwd
/home/gituser
[[email protected] ~]$ mkdir project.git
[[email protected] ~]$ cd project.git/
[[email protected] project.git]$ ls
[[email protected] project.git]$ git --bare init
Initialized empty Git repository in /home/gituser-m/project.git/
[[email protected] project.git]$ ls
branches config description HEAD hooks info objects refs
Gerar par de chaves RSA públicas / privadas
Vamos percorrer o processo de configuração de um servidor Git, ssh-keygen O utilitário gera um par de chaves RSA públicas / privadas, que usaremos para autenticação do usuário.
Abra um terminal e digite o seguinte comando e apenas pressione Enter para cada entrada. Após a conclusão bem-sucedida, ele criará um.ssh diretório dentro do diretório inicial.
[email protected] ~]$ pwd
/home/tom
[[email protected] ~]$ ssh-keygen
O comando acima produzirá o seguinte resultado.
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tom/.ssh/id_rsa): Press Enter Only
Created directory '/home/tom/.ssh'.
Enter passphrase (empty for no passphrase): ---------------> Press Enter Only
Enter same passphrase again: ------------------------------> Press Enter Only
Your identification has been saved in /home/tom/.ssh/id_rsa.
Your public key has been saved in /home/tom/.ssh/id_rsa.pub.
The key fingerprint is:
df:93:8c:a1:b8:b7:67:69:3a:1f:65:e8:0e:e9:25:a1 [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| |
|
.
|
| Soo |
| o*B. |
| E = *.= |
| oo==. . |
| ..+Oo
|
+-----------------+
ssh-keygen gerou duas chaves, a primeira é privada (ou seja, id_rsa) e a segunda é pública (ou seja, id_rsa.pub).
Note: Nunca compartilhe sua chave privada com outras pessoas.
Adicionando chaves a authorized_keys
Suponha que haja dois desenvolvedores trabalhando em um projeto, ou seja, Tom e Jerry. Ambos os usuários geraram chaves públicas. Vamos ver como usar essas chaves para autenticação.
Tom adicionou sua chave pública ao servidor usando ssh-copy-id comando conforme fornecido abaixo -
[[email protected] ~]$ pwd
/home/tom
[[email protected] ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
O comando acima produzirá o seguinte resultado.
[email protected]'s password:
Now try logging into the machine, with "ssh '[email protected]'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
Da mesma forma, Jerry adicionou sua chave pública ao servidor usando o comando ssh-copy-id.
[[email protected] ~]$ pwd
/home/jerry
[[email protected] ~]$ ssh-copy-id -i ~/.ssh/id_rsa [email protected]
O comando acima produzirá o seguinte resultado.
[email protected]'s password:
Now try logging into the machine, with "ssh '[email protected]'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
Enviar alterações para o repositório
Criamos um repositório vazio no servidor e permitimos acesso para dois usuários. A partir de agora, Tom e Jerry podem enviar suas alterações para o repositório, adicionando-o como um controle remoto.
O comando Git init cria .git diretório para armazenar metadados sobre o repositório toda vez que lê a configuração do .git/config Arquivo.
Tom cria um novo diretório, adiciona o arquivo README e confirma sua alteração como confirmação inicial. Após o commit, ele verifica a mensagem de commit executando ogit log comando.
[[email protected] ~]$ pwd
/home/tom
[[email protected] ~]$ mkdir tom_repo
[[email protected] ~]$ cd tom_repo/
[[email protected] tom_repo]$ git init
Initialized empty Git repository in /home/tom/tom_repo/.git/
[[email protected] tom_repo]$ echo 'TODO: Add contents for README' > README
[[email protected] tom_repo]$ git status -s
?? README
[[email protected] tom_repo]$ git add .
[[email protected] tom_repo]$ git status -s
A README
[[email protected] tom_repo]$ git commit -m 'Initial commit'
O comando acima produzirá o seguinte resultado.
[master (root-commit) 19ae206] Initial commit
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 README
Tom verifica a mensagem de log executando o comando git log.
[[email protected] tom_repo]$ git log
O comando acima produzirá o seguinte resultado.
commit 19ae20683fc460db7d127cf201a1429523b0e319
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 07:32:56 2013 +0530
Initial commit
Tom enviou suas alterações para o repositório local. Agora, é hora de enviar por push as alterações para o repositório remoto. Mas antes disso, temos que adicionar o repositório como remoto, esta é uma operação única. Depois disso, ele pode enviar com segurança as alterações para o repositório remoto.
Note- Por padrão, Git empurra apenas para branches correspondentes: para cada branch que existe no lado local, o lado remoto é atualizado se um branch com o mesmo nome já existir lá. Em nossos tutoriais, toda vez que fazemos mudanças noorigin master ramo, use o nome do ramo apropriado de acordo com sua necessidade.
[[email protected] tom_repo]$ git remote add origin [email protected]:project.git
[[email protected] tom_repo]$ git push origin master
O comando acima produzirá o seguinte resultado.
Counting objects: 3, done.
Writing objects: 100% (3/3), 242 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:project.git
* [new branch]
master −> master
Agora, as alterações foram confirmadas com sucesso no repositório remoto.