Como utilizar o Git com programação

Pode levar quatro anos para que vulnerabilidades em software de código aberto sejam detectadas
GitHub contabilizou mais de 56 milhões de desenvolvedores na plataforma, com mais de 60 milhões de novos repositórios. Imagem: GitHub.

Como utilizar o git com programação de uma forma simples? Nesse tutorial tentarei descrever como funciona a parte de branch e merge no git. Existem várias formas, mas vou usar com 3 branches, master, dev e quote.

master – parte principal, versão estável do aplicativo.
dev – parte que está em desenvolvimento versão instável.
quote – código em desenvolvimento.

Como utilizar o Git com programação?

Segue foto do fuxograma dos branches.

Fluxograma de branch no git.
Modelo de branch descritos com fluxograma.

Nesse primeiro contato com esses dois comandos do git não vou programar algo muito complexo.Vou deixar essa parte mais complexa do git com programação quando começarmos a utilizar o github. Assim, podemos utilizar um maior número de recursos do git e também já estaremos mais avançados.

Mãos a obra.

Iniciando o git e preparando a base

Criando e entrando no diretório.

$ mkdir -p Dev/Kotlin/MediaAlunos
$ cd Dev/Kotlin/MediaAlunos

Iniciando git e criando arquivo de README.md

$ git init
$ echo “Média dos Alunos” > README.md

Adicionando README.md ao git e fazendo primeiro commit.

$ git add README.md
$ git commit -m “Início do programa de média dos alunos”
[master (root-commit) 36d4f90] Início do programa de média dos alunos
1 file changed, 1 insertion(+)
create mode 100644 README.md

Utilizar o git para criação dos branches

Agora vamos criar nossos branches e começar a utilizá-los. Então, o checkout -b serve para criar o branch e entrar nele. Deste modo, o primeiro a ser criado será o dev a partir do master. Se apenas utilizar o checkout ele entra no branch existente.

$ git checkout -b dev master
$ git branch
* dev
master

Neste momento vamos criar o quote que é onde trabalharemos e faremos o merge no dev. Do mesmo modo, quando for uma versão estável faremos o merge no master.

$ git checkout -b quote dev
$git branch
dev
master
* quote

Começando a programar

Vamos criar um programa simples, porém, contendo algumas falhas ainda, para depois corrigirmos.

$ nano media_alunos.kt

Segue o programa que deve estar dentro do arquivo media_alunos.kt.

import java.util.Scanner

fun main(){ 

	var nome: String?
	var n1: Double
	var n2: Double
	var n3: Double
	var n4: Double
	var media: Double

	var reader = Scanner(System.`in`) 

	println("Digite o nome do aluno:")
	nome = readLine()
	println("Digite a nota 1:") 
	n1 = reader.nextDouble() 
	println("Digite a nota 2:") 
	n2 = reader.nextDouble() 
	println("Digite a nota 4:") 
	n3 = reader.nextDouble() 
	println("Digite a nota 4:") 
	n4 = reader.nextDouble() 

	media = (n1+n2+n3+n4)/4
	println("nNome: "+nome)
	println("Média: $media") 
}

Aperte ctrl+x para sair e salvar, S ou Y para confirmar.

Bom, vamos compilar e ver que o programa funciona, mas ainda faltam
alguns ajustes para melhorar.

$ kotlinc media_alunos.kt -include-runtime -d media_alunos.jar

Agora vamos executar o programa.

$ java -jar media_alunos.jar

Você pode utilizar o programa. Ele vai fazer a média entre as 4 notas adicionadas.

Utilizar o git no primeiro merge, versão instável

Vamos agora colocarmos ele no branch dev que é a versão instável do programa.

$ git add media_alunos.kt
$ git commit -m “Programa funcionando, com falhas”

Entrando no branch dev

$ git checkout dev

Checando em qual branch estamos.

$ git branch
* dev
master
quote

Fazendo o merge do quote no dev.

$ git merge quote
Updating 36d4f90..de4c581
Fast-forward
media_alunos.kt | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
create mode 100644 media_alunos.kt

Utilizar o git para deletar o branch quote

Deletamos o branch quote para não ficar com um número grande de branches. Então, recriaremos o mesmo para voltar a programar.

$ git branch -d quote
Deleted branch quote (was de4c581).

Corrigindo o programa

Recriando quote para fazer a correção.

$ git checkout -b quote dev

Agora vamos modificar nosso código fonte para que fique igual ao seguinte.

$ nano media_alunos.kt
fun main(){ 

	var nome: String?
	var n1: Double
	var n2: Double
	var n3: Double
	var n4: Double
	var media: Double

	println("Digite o nome do aluno:")
	nome = readLine()
	println("Digite a nota 1:") 
	n1 = readNota()
	println("Digite a nota 2:") 
	n2 = readNota()
	println("Digite a nota 4:") 
	n3 = readNota()
	println("Digite a nota 4:") 
	n4 = readNota()

	media = (n1+n2+n3+n4)/4
	println("nNome: $nome")
	println("Média: $media") 
}
private fun readNota(): Double {
	var nota = readLine()
	try{
		nota = nota!!.replace(",",".")
		val y = nota.toDouble()
		if(y > 10.0) {
				println("Nota maior que 10, valor = 10.")
				return 10.0
		}
		else if(y < 0.0) {
				println("Nota menor que 0, valor = 0.")
				return 0.0
		}
		else {
				return y
		}
	} catch(e: NumberFormatException){
		println("Não foi digitado um número válido, valor = 0.")
		return 0.0
	}
}

Vamos sair e salvar com ctrl+x e S ou Y.

Para ver as diferenças usaremos o diff.

$ git diff
diff --git a/media_alunos.kt b/media_alunos.kt
index ad08a8c..7d334a0 100644
--- a/media_alunos.kt
+++ b/media_alunos.kt
@@ -1,5 +1,3 @@
-import java.util.Scanner
-
 fun main(){ 
 
        var nome: String?
@@ -9,20 +7,39 @@ fun main(){
        var n4: Double
        var media: Double
 
-       var reader = Scanner(System.`in`) 
-
        println("Digite o nome do aluno:")
        nome = readLine()
        println("Digite a nota 1:") 
-       n1 = reader.nextDouble() 
+       n1 = readNota()
        println("Digite a nota 2:") 
-       n2 = reader.nextDouble() 
+       n2 = readNota()
        println("Digite a nota 4:") 
-       n3 = reader.nextDouble() 
+       n3 = readNota()
        println("Digite a nota 4:") 
-       n4 = reader.nextDouble() 
+       n4 = readNota()
 
        media = (n1+n2+n3+n4)/4
-       println("nNome: "+nome)
+       println("nNome: $nome")
        println("Média: $media") 
 }
+private fun readNota(): Double {
+       var nota = readLine()
+       try{
+               nota = nota!!.replace(",",".")
+               val y = nota.toDouble()
+               if(y > 10.0) {
+                               println("Nota maior que 10, valor = 10.")
+                               return 10.0
+               }
+               else if(y < 0.0) {
+                               println("Nota menor que 0, valor = 0.")
+                               return 0.0
+               }
+               else {
+                               return y
+               }
+       } catch(e: NumberFormatException){
+               println("Não foi digitado um número válido, valor = 0.")
+               return 0.0
+       }
+}

Na frente da linha o sinal de (-) foi retirada. Do mesmo modo, a linha e sinal de (+) foi adicionada a linha.

Adicionando as mudanças ao git.

$ git add media_alunos.kt
$ git commit -m “Adicionada função de ler notas.”

 

Utilizar o git para adicionar o código a versão instável

Adicionar o código ao branch dev.

$ git checkout dev
$ git merge quote
Updating 7df65c0..3c23036
Fast-forward
media_alunos.kt | 35 ++++++++++++++++++++++++++———
1 file changed, 26 insertions(+), 9 deletions(-)

Deletando o branch que não vamos usar.

$ git branch -d quote

Utilizar o git para criar nossa primeira versão estável

Para terminar, vamos criar nossa primeira versão estável do programa.

$ git checkout master
$ git merge dev
Updating 27628e0..3c23036
Fast-forward
media_alunos.kt | 45 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
create mode 100644 media_alunos.kt

Criando a tag da nossa versão.

$ git tag 1.0

Vendo o progresso da criação.

$ git log
commit 3c23036c0abbabd05ca01220ff24bcc15d7e9a18 (HEAD -> master, tag: 1.0, dev)
Author: Rodrigo Leutz 
Date:   Wed Sep 25 15:12:42 2019 -0300

    Adicionada função de ler notas.

commit 7df65c0a1bd09a1361fcaad4a0a74878580366f2
Author: Rodrigo Leutz 
Date:   Wed Sep 25 14:07:18 2019 -0300

    Programa funcionando, com falhas

commit 27628e037655e93808f545299cd241332af44b71
Author: Rodrigo Leutz 
Date:   Wed Sep 25 13:58:58 2019 -0300

    Início do programa de média dos alunos

Para compilar e executar o programa criado basta digitar novamente os comandos.

$ kotlinc media_alunos.kt -include-runtime -d media_alunos.jar
$ java -jar media_alunos.jar

Na próxima parte sobre como utilizar o git com programação, tentarei descrever melhor os passos vistos até agora para terminar esse programa. E vamos enviar o projeto para o Github.

 

<- Começando a utilizar o Git com programação