Estava fazendo o setup de uma nova máquina para usar o git e não lembrava de algumas mudanças a serem feitas. Como sempre, estou colocando aqui para não me esquecer mais. 🙂
Continuar a lerEtiqueta: git
Oooops… errei no git.
Por vezes a gente erra operando os comandos do git. Aqui relaciono algumas situações que passei e estou documentando aqui para eu me lembrar sobre o que fazer quando errar novamente. 😛
Continuar a lerBranch padrão para novos repositórios no github.
Já fizemos uma conversa aqui sobre porque você deveria trocar o branch dos repositórios de master para main ou trunk ou qualquer outro nome.
E logo depois de eu fazer o post, criei um novo repositório e lá me aparece o branch master novamente.
Continuar a lerTrocando o branch master para main no git
Eu aprendi em 2019 a criar uma branch no git. Sério. Não é clickbait:)
Em seguida explico como eu funciono.
Para quem não desenvolve software, é comum você criar estruturas auxiliares para poder modificar um pedaço do sistema e depois quando entendo que está tudo ok, você integra na linha principal. Pensa em manter uma cópia de um documento e depois a ferramenta ajuda em juntar as diferentes partes.
Eu sempre fui adepto do trunk based development, onde não existem estruturas auxiliares. Você sempre atualiza a raiz do código fonte, e é sua responsabilidade garantir que seu código vai dormir até que alguém diga que ele pode ser liberado para alguém que usa o sistema. Você faz pequenos avanços e cria controles para garantir o funcionamento, como configurações e testes automatizados. E aqui fica visível a diferença entre deploy e release.
Continuar a lergit clone parou de funcionar no mac?
Essa é para quem desenvolve software ou quem por acaso usa git. Você fez um comando “git clone” no mac e recebeu:
Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo.
Mas vamos combinar, ficar rodando todos os comandos com sudo não me parece ser uma boa regra de segurança. A mensagem de erro não condiz com o que precisa ser executado no terminal.
Seu próximo deploy será na nuvem!
Quanto custa manter um servidor para hospedar um novo produto web? Um servidor para aplicação, servidor de banco de dados, redundância… pode ser um valor bem alto dependendo das suas expectativas!
Mas…
Preparando um projeto Delphi para o Git
A base aqui é preparar um projeto Delphi Git e publicar no GitHub. Neste exemplo usei uma demonstração do uso de um TWebBrowser para mostrar um gráfico do Google Chart Api. O repo foi originário de uma pergunta que rolou na lista do DUG-RS e aproveitei para brincar um pouco.
Antes de qualquer coisa… instale o Git para a plataforma Windows. 🙂
Eu gosto de usar o Git pela linha de comando mas o GitHub fez um cliente para windows. Fica a sua escolha.
Acostumei a usar a linha de comando e posso garantir a você que é bem tranquilo de trabalhar. Te dá controle e uma vontade constante de manter o repositório atualizado. A integração de código com a base de código no repositório agradece!
Sobre outras opções de instalação, se você é usuário do Tortoise SVN pode ter interesse em avaliar o Tortoise GIT.
Bom, depois de instalar vamos via “Git Bash” até a pasta onde está o seu código fonte.
Para saber a pasta atual, use o comando “pwd”.
Estando na pasta, vamos inicializar um repositório Git através do comando:
$ git init
Initialized empty Git repository in c:/Users/dwildt/Code/google-graph/.git/
A partir do comando de status, podemos ver todos os arquivos que devem ser enviados para o repositório:
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use “git add <file>…” to include in what will be committed)
#
# GoogleGraph.cfg
# GoogleGraph.dof
# GoogleGraph.dpr
# GoogleGraph.res
# GoogleGraph.~dpr
# dcu/
# exe/
# src/
nothing added to commit but untracked files present (use “git add” to track)
Note que ali na listagem aparecem arquivos .~dpr e aparecem pastas exe e dcu. Não queremos estas pastas no nosso controle de versão. Então vamos criar um arquivo “.gitignore“. Para fazer a criação deste arquivo, vamos fazer um touch e depois editar o arquivo usando o VIM. Você também pode fazer a edição deste arquivo pelo próprio Delphi, mas enfim, aproveite para brincar um pouco com o VIM.
$ touch .gitignore
$ vim .gitignore
Ao entrar no VIM, entramos em modo de inserção pressionando “I”. E vamos digitar o seguinte:
*.~*
*.dcu
*.exe
exe
dcu
Para sair do VIM, vamos fazer: <ESC> + :wq + <ENTER>
Para conferir o conteúdo do arquivo podemos usar o comanto “cat”:
$ cat .gitignore
Então em resumo, coloquei que arquivos com extensão dcu, exe e qualquer arquivo que a extensão comece com “~” deve ser deixado de lado. Ainda, que as pastas exe e dcu não devem ser consideradas. Ao fazer um novo git status os arquivos que estão no .gitignore já não aparecem mais.
Sobre a estrtutura de projeto, eu normalmente configuro meus projetos com a estrutura de pastas:
- src – fontes
- dcu – units compiladas
- exe – binários
- Tenho outras pastas que crio normalmente (exemplo docs), mas para o foco do post está ok.
Agora vamos fazer um commit dos arquivos. Você pode estar se perguntando onde configuramos o repositório. Ainda não configuramos. E aí você me pergunta como assim não configuramos? Como você vai fazer um commit sem ter um repositório definido. Bom, vamos ver na prática:
$ git add .
O comando acima adiciona todos arquivos que não estão “controlados” no commit a ser feito. Agora vamos fazer o commit.
$ git commit -am “primeiro commit do demo com google graph e twebbrowser”
[master (root-commit) f7ca3f2] primeiro commit do demo com google graph e twebbrowser
7 files changed, 474 insertions(+), 0 deletions(-)
create mode 100644 .gitignore
create mode 100644 GoogleGraph.cfg
create mode 100644 GoogleGraph.dof
create mode 100644 GoogleGraph.dpr
create mode 100644 GoogleGraph.res
create mode 100644 src/UFormGoogleGraph.dfm
create mode 100644 src/UFormGoogleGraph.pas
Com este comando, ao fazer um git status, temos:
$ git status
# On branch master
nothing to commit (working directory clean)
E aqui mora o principal problema de quem começa a trabalhar com o git, de confundir o commit que realizamos aqui com uma operação de checkin em um SubVersion por exemplo. Ao fazer um commit, apenas estamos “indicando que aquela unidade de trabalho foi finalizada”. Durante um dia de trabalho, devemos fazer diversos commits, e pequenos commits.
Isto está muito ligado com a prática de Continuous Integration. Devemos garantir que o nosso código está no controle de versão e sendo compilado e validado. Isto é assunto mais específico para outro post. O objetivo aqui é aproveitar este demo que fiz, para poder mostrar como podemos usar o Git com Delphi.
Ok, mas e aí, e o tal repositório?
Vou usar o GitHub, e vou criar um repositório. Lá fui eu e criei na minha conta o repositório abaixo:
https://github.com/dwildt/google-pie-graph-with-delphi-twebbrowser
Aí para poder enviar e sincronizar os arquivos, vou adicionar um “remote“, que é a forma que tenho para conectar meu fonte local com uma fonte remota. Voltamos para a linha de comando.
$ git remote add origin git@github.com:dwildt/google-pie-graph-with-delphi-tweb
browser.git
E feito isto, agora vou sincronizar meus dados com o repositório.
$ git push origin master
Counting objects: 10, done.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (10/10), 5.07 KiB, done.
Total 10 (delta 0), reused 0 (delta 0)
To git@github.com:dwildt/google-pie-graph-with-delphi-twebbrowser.git
* [new branch] master -> master
Fazemos isto através de um push. Origin é o nome que dei para o remote no passo acima. Master é o nome do branch. O master é o branch principal.
E pronto, seu projeto está agora no Github. O ponto é que agora o processo vai ser:
- git status para ver o que modificou
- git add e git commit para registrar as mudanças.
- git push para enviar as mudanças para o seu repositório.
Você pode ter mais de um remote configurado, isto é tranquilo. Você pode ter por exemplo, o seu remote para controle de versão puro e pode ter um outro que quando recebe o código fonte, realiza um build e instala a versão em um determinado ambiente.
Para conhecer mais sobre GIT, deixo referências: