Skip to content

Instantly share code, notes, and snippets.

@marcelopalin
Last active December 4, 2023 15:11
Show Gist options
  • Select an option

  • Save marcelopalin/6f6ff31d6904bc5820a77730c984868e to your computer and use it in GitHub Desktop.

Select an option

Save marcelopalin/6f6ff31d6904bc5820a77730c984868e to your computer and use it in GitHub Desktop.
Configurando Duas Contas GitLab no Mesmo Sistema Linux
# **Configurando Duas Contas GitLab no Mesmo Sistema Linux**
## **1. Introdução**
Este tutorial auxilia na configuração de duas contas GitLab — uma pessoal e outra de trabalho — em uma única máquina Linux, utilizando chaves SSH e configurações de usuário distintas.
## **2. Geração e Configuração de Chaves SSH**
### **Gerar Chaves SSH:**
1. Abra o terminal.
2. Para a conta pessoal, execute:
```
ssh-keygen -t rsa -b 4096 -C "seu_email_pessoal@example.com" -f ~/.ssh/id_rsa_personal
```
3. Para a conta de trabalho, execute:
```
ssh-keygen -t rsa -b 4096 -C "seu_email_de_trabalho@example.com" -f ~/.ssh/id_rsa
```
### **Alterar Permissões das Chaves:**
1. Execute os comandos:
```
chmod 600 ~/.ssh/id_rsa_personal
chmod 600 ~/.ssh/id_rsa
```
### **Adicionar Chaves ao Agente SSH:**
1. Execute:
```
ssh-add ~/.ssh/id_rsa_personal
ssh-add ~/.ssh/id_rsa
```
## **3. Configuração dos Arquivos `.gitconfig`, `.gituser-default` e `.gituser-work`**
Crie estes arquivos na raiz do seu linux. Se não sabe onde fica, abra o terminal
e digite: `echo $HOME`
Para ir até lá basta digitar: `cd ~` ou apenas `cd` que ele muda para o seu diretório HOME.
### **.gitconfig:**
```ini
[include]
path = .gituser-default
[includeIf "gitdir:~/work/"]
path = .gituser-work
[includeIf "gitdir:~/www/"]
path = .gituser-default
[alias]
c = !git add --all && git commit -m
s = !git status -s
l = log --graph --decorate --date-order --date=local --date=format:'%y-%M-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %Cgreen(%cd) %C(auto)%d %C(bold blue)<%an>%Creset' --max-count=20 --abbrev-commit
lall = log --graph --decorate --date-order --date=local --date=format:'%y-%M-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %Cgreen(%cd) %C(auto)%d %C(bold blue)<%an>%Creset' --abbrev-commit
previous = !git checkout $(git rev-list demo-start~1..HEAD | head -2 | tail -1)
next = !git checkout $(git rev-list HEAD..demo-end | tail -1 )
[core]
autocrlf = input
editor = code --wait
[merge]
tool = vscode
[mergetool "vscode"]
cmd = code --wait $MERGED
[diff]
tool = vscode
[difftool "vscode"]
cmd = code --wait --diff $LOCAL $REMOTE
[user]
signingkey = A61BAA8B5EFC0032
[diff]
tool = vscode
[difftool "vscode"]
cmd = code --wait --diff $LOCAL $REMOTE
[url "ssh://git@github.com/"]
insteadOf = https://github.com/
[url "git@github.com"]
insteadOf = https://github.com
```
### **.gituser-default (Para conta pessoal):**
```git
[user]
name = FULL NAME
email = my.personal@zmail.com
[core]
sshCommand = "ssh -i ~/.ssh/id_rsa_personal"
editor = code --wait
```
### **.gituser-work (Para conta de trabalho):**
```git
[user]
name = FULL NAME
email = seu_email_de_trabalho@example.com
[core]
sshCommand = "ssh -i ~/.ssh/id_rsa"
editor = code --wait
```
A parte que aparece:
```s
[user]
signingkey = A61BAA8B5EFC0032
[commit]
gpgsign = true
```
Diz para o Git assinar automaticamente os commits utilizando a chave GPG.
Para saber mais como assinar seus Commits leia a última seção deste artigo.
---
## **4. Diretivas `includeIf`**
- A diretiva `includeIf "gitdir:~/work/"` no `.gitconfig` permite alternar automaticamente para a configuração de trabalho ao entrar no diretório `~/work`.
---
## **5. Testes e Validação**
- Teste clonando repositórios de ambas as contas para garantir que as configurações estão corretas.
- Faça commits e verifique se o nome de usuário e e-mail estão corretos em cada repositório.
---
## **6. Conclusão e Dicas Adicionais**
- Mantenha suas chaves SSH seguras e não compartilhe com ninguém.
- Utilize comentários nos arquivos de configuração para facilitar a manutenção e o entendimento por outros usuários.
---
## **7. Gerando uma chave GPG e assinando os Commits do Git**
### 1. Instalar GPG
Primeiro, certifique-se de ter o GPG instalado. Em sistemas baseados em Unix (como Linux e macOS), ele geralmente já está instalado. No Windows, você pode usar o [Gpg4win](https://www.gpg4win.org/).
### 2. Gerar Chave GPG
Para gerar uma nova chave GPG, abra o terminal e execute:
```bash
gpg --full-generate-key
```
Siga as instruções, escolhendo o tipo de chave (geralmente RSA e RSA), tamanho da chave (2048 ou 4096 são comuns), tempo de expiração (pode ser `0` para nunca expirar) e detalhes do usuário (nome e e-mail).
### 3. Listar Chaves GPG
Depois de gerar a chave, liste suas chaves GPG para encontrar o ID da chave que você acabou de criar:
```bash
gpg --list-secret-keys --keyid-format LONG
```
Você verá uma saída como esta:
```bash
sec rsa4096/123ABCD123456789 2023-01-01 [SC]
1234567890ABCDEF1234567890ABCDEF12345678
uid [ultimate] Seu Nome <seu@email.com>
ssb rsa4096/987FEDCBA9876543 2023-01-01 [E]
```
Neste exemplo, `123ABCD123456789` é o ID da chave.
### 4. Associar Chave GPG com Git
Agora, configure o Git para usar essa chave para assinar commits:
```bash
git config --global user.signingkey 123ABCD123456789
```
Substitua `123ABCD123456789` pelo ID da sua chave.
### 5. Dizer ao Git para Assinar Commits Automaticamente
Se desejar, você pode configurar o Git para assinar todos os seus commits automaticamente:
```bash
git config --global commit.gpgsign true
```
### 6. Adicionar Chave GPG ao GitHub (Opcional)
Se você estiver usando o GitHub, será necessário adicionar sua chave GPG pública a sua conta do GitHub:
- Exporte sua chave GPG pública:
```bash
gpg --armor --export 123ABCD123456789
```
- Copie a saída.
- No GitHub, vá para "Settings" -> "SSH and GPG keys" -> "New GPG key", cole sua chave pública e salve.
### 7. Assinar Commits
Agora, quando você fizer um commit, pode assinar manualmente usando:
```bash
git commit -S -m "Your commit message"
```
O `-S` é o que diz ao Git para assinar o commit. Se você configurou o Git para assinar commits automaticamente, não precisará do `-S`.
## Perguntas Frequentes sobre Assinatura dos Commits
- **Se eu não tiver uma chave GPG, ainda posso fazer commits?**
- Sim, a menos que a política do repositório exija commits assinados, você pode fazer commits sem uma chave GPG.
- **E se eu estiver em uma máquina nova?**
- Em uma nova máquina, você precisará instalar o GPG, gerar uma nova chave (ou importar uma existente) e configurar o Git para usá-la, seguindo os passos acima.
- **Posso usar a mesma chave em várias máquinas?**
- Sim, você pode exportar sua chave privada e importá-la em outra máquina. No entanto, faça isso com cuidado, pois a chave privada deve ser mantida segura.
Assinar commits com uma chave GPG adiciona uma camada extra de segurança, especialmente em projetos colaborativos, garantindo que os commits sejam autênticos e não tenham sido alterados.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment