Trabalhando com mais de uma configuração do git em um único computador
15/08/2022
Liandro Silva

Sumário

  1. Contextualizando
  2. Entendendo o arquivo .gitconfig
  3. Estabelecendo um padrão de organização
  4. Definindo as configurações específicas 1. Criando gitconfigs individuais 2. Setando o valor de cada gitconfig
  5. Incluindo as configuração no .gitconfig global
  6. Conclusão
  7. Referências

Contextualizando

Em algumas empresas que já trabalhei, precisei usar minha própria máquina para exercer a atividade de desenvolvimento de software. Nesse cenário, por muito tempo, eu tive uma grande dificuldade/questionamento:

Como eu poderia separar as configurações do git para os projetos pessoais e para os projetos profissionais?

Comecei a buscar por algumas soluções e logo no início, para não desprender o que achava que seria "muito tempo" em configurações, eu adotei a seguinte prática:

todos os projetos devem estar em um local seguro e dentro de um diretório chamado www, e toda vez que eu clonar um repo novo, dentro do projeto eu vou configurar localmente coisas como o e-mail e nome que irão na assinatura de cada commit.

E, por muito tempo, fiz assim:

  • Clonava um repositório
  • Acessava o repositório
  • efetuava as configs, como:
$ git config user.name "Xiquinho da silva"
$ git config user.email "oi@xiquinhodasilva"

Um belo dia, reparei que na verdade isso era muita perda de tempo, e era muito mais coisa... Era CHATO. Resolvi voltar a pesquisar com um único objetivo "dar voz a minha preguiça interior e fazer essas configurações uma única vez e esquecê-las depois..."

Felizmente, eu consegui e é isso quero compartilhar por aqui!

AVISO
Todas configurações aqui apresentadas foram feitas usando uma distro Linux. Portanto, você vai conseguir executar todos os passos em qualquer distro Linux, em um Mac e no Windows creio que apenas se seu workflow estiver dentro do WSL!
Sinta-se a vontade para complementar este artigo com uma maneira de implementar essas configurações em um ambiente Windows sem WSL.

Entendendo o arquivo .gitconfig

Este é um arquivo oculto responsável por armazenar as configurações globais ou locais do git em sua máquina, é nele que você vai encontrar, por exemplo, o nome que você definiu que deve ser exibido no log dos commits, o seu e-mail, é nele que você cria os aliases do git, etc. Você consegue manipular os valores deste arquivo utilizando o comando abaixo:

$ git config --local || --global || --system config value

Este arquivo vai ser o responsável por chamar as configurações que nós queremos para cada projeto, conforme veremos mais adiante.

Estabelecendo um padrão de organização

Para alcançar o nosso objetivo, precisamos antes definir um modelo de organização para nossos projetos, aqui vai uma sugestão:

  • Crie um diretório chamado www em um local de sua preferência;
  • Acesse este diretório e agora crie um diretório para sua empresa e outro para projetos pessoais
$ mkdir side-projects && mkdir empresa-qualquer

Isso é necessário, pois faremos com que o git sete uma configuração específica para cada um destes diretórios, dessa maneira, cada projeto que você clonar para side-projects terá uma configuração diferente do que foi aplicado para empresa-qualquer.

AVISO
Aqui estou usando dois diretórios apenas, mas você pode ter quantos você quiser, ok? Segue o fio...

Definindo as configurações específicas

Criando gitconfigs individuais

Volte para raíz de seu usuário, você pode usar o comando abaixo:

$ cd $HOME

ou

$ cd ~

Estando na raíz de seu usuário, devemos criar agora um arquivo .gitconfig para cada um dos diretórios que você criou dentro de www no passo anterior, você pode usar o comando abaixo:

$ touch .gitconfig-side-projects && touch .gitconfig-empresa-qualquer
Setando o valor de cada gitconfig

Agora, acesse esses arquivos criados através de seu terminal ou de um editor de texto de sua preferência. Eu usarei o querido vscode, podemos executar o seguinte comando:

$ code .gitconfig-side-projects

Com o arquivo aberto, é hora de começar nossa configuração, neste artigo vamos abordar tópicos simples como nome e e-mail, vamos lá!

copie e cole dentro do arquivo, o trecho abaixo:

[user]
    name = Seu Nome
    email = seuemail@email.com

Salve e retorne para raíz de seu usuário.

Repita o processo para todos os outros gitconfigs criados, lembrando de cada um deve ter uma configuração específica.

Incluindo as configurações no gitconfig global

Acesse através de seu terminal ou de um editor de texto de sua preferência o arquivo chamado .gitconfig.

AVISO
O arquivo .gitconfig está localizado na raíz de seu usuário

Copie e cole dentro do arquivo (a partir da última linha) o trecho abaixo:

[includeIf "gitdir:~/www/side-projects/"]
  path = ~/.gitconfig-side-projects
[includeIf "gitdir:~/www/empresa-qualquer"]
  path = ~/.gitconfig-empresa-qualquer  

Salve e retorne para raíz de seu usuário.

Basicamente, o que nós fizemos foi adicionar ao arquivo de configuração global do git condicionais que serão responsáveis por identificar qual o diretório em que um determinado projeto, que contenha o git inicializado, está e com isso setar o path específico para ele.

Como resultado, a cada commit que você realizar dentro, por exemplo, de ~/www/side-projects/ o que estará assinado como nome e e-mail foi o que você declarou no .gitconfig-side-projects.

Legal, não é?

Conclusão

Agora, você tem um ambiente pronto para receber N projetos e não vai precisar se preocupar com configurações iniciais do git. Isso vai conferir a você um pouco mais de agilidade e praticidade no dia a dia.

Referências

Confira aqui como está o meu arquivo de configuração global do git

Conheça o autor

Liandro Silva

JavaScript Developer using React | React Native | NestJS

Atuando como desenvolvedor há mais de dois anos, tenho hoje como foco principal o Desenvolvimento Web (Back-end e Front-end). Passei por diversos segmentos no mercado, como por exemplo, Logística, E-learning, CX e Contabilidade, participando desde o levantamento de requisitos, codificação até o deploy da aplicação. Sempre preocupado em escrever um código limpo, um código escrito para o futuro, seguindo padrões de projeto e arquitetura. Além disso, prezo sempre pela experiência final do usuário, por isso, sempre estou atento a interações e/ou processos que otimizem a performance e acessibilidade.

An unhandled error has occurred. Reload 🗙