Git – Manipulando repositórios e diretorios

Hoje venho trazer uma dica que achei muito interessante do git, após atender a necessidade que precisava em uma ferramenta onde iria acessar repositórios Git em diferentes diretórios locais, onde olhando no man git solucionou o problema.

Vamos ao problema e a solução…

Tenho N repositórios, no exemplo irei utilizar /tmp/repo1 e /tmp/repo2 para ilustrar, e preciso obter informações sobre estes repositórios como branch, logs e outras informações, inicialmente pensei em acessar cada diretório com ‘cd’ e realizar os comandos do Git, mas conseguimos isso com os parâmetros –git-dir, –work-tree ou -C e ainda duas variáveis ambientes que podem auxiliar GIT_DIR e GIT_WORK_TREE.

Método 1

Utilizando os parâmetros –git-dir e –work-tree.

$ git --git-dir=/tmp/repo1/.git/ --work-tree=/tmp/repo1/ status
On branch master
nothing to commit, working directory clean
$ git --git-dir=/tmp/repo1/.git/ --work-tree=/tmp/repo1/ branch
* master
$ git --git-dir=/tmp/repo1/.git/ --work-tree=/tmp/repo1/ log
commit 900641f96acb5e9eabcc6c524eb9b625abd737a2
Author: Cleiton Bueno <cleitonrbueno at gmail.com>
Date:   Tue Dec 6 21:00:02 2016 -0200

    Create file defailt main.c
$
$ git --git-dir=/tmp/repo2/.git/ --work-tree=/tmp/repo2/ status
On branch dev
nothing to commit, working directory clean
$ git --git-dir=/tmp/repo2/.git/ --work-tree=/tmp/repo2/ branch
* dev
  master
$ git --git-dir=/tmp/repo2/.git/ --work-tree=/tmp/repo2/ log
commit 94fd45125d526a0c78349e2157703c3cadd30d57
Author: Cleiton Bueno <cleitonrbueno at gmail.com>
Date:   Tue Dec 6 20:59:41 2016 -0200

    Create file default main.py
$

Sem grande mistério, –git-dir aponto para o diretório do repositório git (.git) e –work-tree para o diretório de trabalho, no caso, onde estão os arquivos a serem versionados.

Método 2

Utilizando o parâmetros -C para substituir –git-dir e –work-dir.

$ git -C /tmp/repo1/ status
On branch master
nothing to commit, working directory clean
$ git -C /tmp/repo1/ branch
* master
$ git -C /tmp/repo1/ log
commit 900641f96acb5e9eabcc6c524eb9b625abd737a2
Author: Cleiton Bueno <cleitonrbueno at gmail.com>
Date:   Tue Dec 6 21:00:02 2016 -0200

    Create file defailt main.c
$
$ git -C /tmp/repo2/ status
On branch dev
nothing to commit, working directory clean
$ git -C /tmp/repo2/ branch
* dev
  master
$ git -C /tmp/repo2/ log
commit 94fd45125d526a0c78349e2157703c3cadd30d57
Author: Cleiton Bueno <cleitonrbueno at gmail.com>
Date:   Tue Dec 6 20:59:41 2016 -0200

    Create file default main.py
$

Sim, muito mais pratico utilizar -C, mas apenas se o repositório e os arquivos estão no mesmo diretório, há casos onde o repositório (.git) esta em outro local ae o uso do –git-dir e –work-dir faz mais sentido.

Método 3

Neste ultimo recurso, iremos ver a mesma função utilizando variáveis ambientes do Git, são elas GIT_DIR e GIT_WORK_TREE.

$ export GIT_DIR=/tmp/repo1/.git/
$ export GIT_WORK_TREE=/tmp/repo1/
$ git status
On branch master
nothing to commit, working directory clean
$ git branch
* master
$ git log
commit 900641f96acb5e9eabcc6c524eb9b625abd737a2
Author: Cleiton Bueno <cleitonrbueno at gmail.com>
Date:   Tue Dec 6 21:00:02 2016 -0200

    Create file defailt main.c
$
$ export GIT_DIR=/tmp/repo2/.git/
$ export GIT_WORK_TREE=/tmp/repo2/
$ git status
On branch dev
nothing to commit, working directory clean
$ git branch
* dev
  master
$ git log
commit 94fd45125d526a0c78349e2157703c3cadd30d57
Author: Cleiton Bueno <cleitonrbueno at gmail.com>
Date:   Tue Dec 6 20:59:41 2016 -0200

    Create file default main.py
$

Foi uma dica curta hoje, mas que pode ajudar quando se tem que varrer diversos repositorios e obter informações.

Até a próxima!

Share Button

CC BY-NC-SA 4.0 Git – Manipulando repositórios e diretorios by Cleiton Bueno is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.