e
quer mais?
Me paga um café! :) PIX consultoria@carlosdelfino.eti.br
Curta o post no final da página, use o Disqus, compartilhe em sua rede social. Isso me ajuda e motiva
Obrigado.
Muitas vezes nosso projeto vai tomando corpo e começamos a criar subdiretórios com novos grupos de arquivos úteis, mas ai descobrimos que estes mesmos arquivos são uteis para diversos projetos e precisamos multiplica-los, como mante-los atualizados em todos os projetos?
A melhor forma de se manter um grupo de arquivos atualizado em todos os projetos é transforma-los em uma biblioteca e instala-los no diretório apropriado de bibliotecas, seja do Arduino ou de outra IDE de desenvolvimeto que esteja usando, isso vai variar muito com o ToolKit que estiver usando para desenvolvimento.
Vamos de vagar, apenas vamos considerar que temos vários projetos, e compartilhamos os mesmos arquivos entre eles, e não queremos ainda transformar este grupo de arquivos numa bibliotéca. Portando se você já estiver usando o GIT e quiser preservar a histórico de amadureccimento do seu código, você pode transformar este diretório em um submodulo.
O primeiro passo
Copie a pasta do seu projeto para uma basta de backup que será seu ambiente de trabalho temporário. Entre nesta pasta de trabalho e remova do git as referencias aos repositórios remotos, fazendo assim você evita qualquer erro.
cp -r meu-projeto-base meu-projeto-base-bck
cd meu-projeto-base-bck
Removendo referências aos repositórios originais
$ git remote -v
=> origin git@github.com:arduinominas/meu-projeto-base
No exemplo acima nosso projeto apontava apenas para arduinominas/meu-projeto-base no GitHub, que é o origin de nosso projeto, então removemos esta referência.
$ git remote remove origin
Filtrando o diretório que será o novo sub-módulo
$ git filter-branch --subdirectory-filter apoio/arquivos-compartilhados HEAD -- --all
$ git reset --hard
$ git gc --aggressive
$ git prune
Com os comando acima você removeu do log do git todos os demais diretórios e manteve apenas informações relativas ao diretório apoio/aquivos-compartilhados
.
envie para o servidor o novo sub-módulo
Você precisa ter no GitHub ou outro servidor de repositórios um repositório vazio já criado e com acesso para você gravar nele os novos arquivos, vamos supor que seja “arduinominas/arquivos-compartilhados”
$ git remote add origin git@github.com:arduinominas/arquivos-compartilhados
Agora adicione qualquer alteração que tenha feita e faça o commit normalmente.
$ git add suas alteracoes
$ git commit
E agora envie seu novo repositório para o servidor.
$ git push origin master
Voltemos ao projeto original e adicionemos o novo repositório
$ cd ../meu-projeto-base
Lembrando que você estava no diretório do projeto de trabalho meu-porjeto-base-bck
.
Primeiro vamos remover o diretório antigo
$ git rm -rf apoio/aquivos-compartilhados
Você pode fazer o commit deste passo para manter o histório do que está fazendo.
Atenção use o comando git rm -r
para remover recursivamente o diretório, e use o -f
para forçar esta remoção, tenha certeza do que está fazendo.
Adicione ao projeto original o novo sub-módulo
Vamos então adicionar o novo sub-módulo com o comando:
$ git submodule add git@github.com:arduinominas/arquivos-compartilhados.git apoio/aquivos-compartilhados
Observe que o novo sub-módulo vai ficar no mesmo diretório que os arquivos ficavam antes, portanto você não terá que fazer alterações em seu código.
Agora inicialize e atualize o sub-módulo com o material que está no servidor:
$ git submodule init
$ git submodule update
E finalize adicionando ao histórico do git o novo sub-módulo para que fique registrado no servidor.
$ git add .gitmodules apoio/arquivos-compartilhados
$ git commit -m "Novos submodulos adicionados referente a pasta de arquivos compartilhados"
Conclusão
Como vimos o processo é muito simples quando se conhece os comandos certos, em grandes projetos o tempo de espera é grande, mas o que precisa ser feito é muito pouco, e você pode fazer isso para todas as pastas que deseja reaproveitar em outros projetos, pode até usar como um template (um modelo) para as pastas mais usadas.
Mas lembre-se há mecanismos mais adequados para se usar com bibliotecas, procure se informar sobre eles no manual da linguagem, do ToolKit/Framework e/ou IDE que usa.
Não deixe de me pagar um café, faz um PIX: consultoria@carlosdelfino.eti.br de qualquer valor.