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!
Git – Manipulando repositórios e diretorios by Cleiton Bueno is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.