├── README.md ├── flow-git.md └── img ├── checkout1.png ├── checkout2.png ├── code.png ├── comandos.gif ├── comandos.gif:Zone.Identifier ├── commit1.png ├── commit2.png ├── commit3.png ├── fork.png ├── fork1.png ├── new-arquivo.png ├── new-branch.png ├── new-branch1.png ├── new-repository.png ├── pr.png ├── pr1.png ├── pr2.png ├── quick-setup.png ├── staging.gif ├── staging.gif:Zone.Identifier └── star.png /README.md: -------------------------------------------------------------------------------- 1 | # Flow Git e Github na prática 2 | sejam bem vindos a mais um flow de aprendizado, eu sou a Rafael Rampasso e hoje eu vou mostrar pra vocês como utilizar o GIT na prática 3 | 4 | ## Instalando o GIT 5 | 6 | * [Link com os downloads](https://git-scm.com/downloads) 7 | 8 | ## Criar um projeto novo 9 | 10 | * Criar uma nova pasta em seu computador, com o nome `Flow Git` 11 | 12 | * Abrir o VSCode nessa pasta 13 | 14 | * Criar um novo arquivo `README.md` 15 | 16 | * Escrever dentro dele `Você aprenderá alguns comandos do Git` 17 | 18 | * Salva o arquivo 19 | 20 | Agora então é hora de usarmos o Git 21 | 22 | * Abre o Git Bash que foi instalado na máquina (pode ser pelo terminal do VSCode mesmo) 23 | 24 | * `git init` para inicializar o repositório 25 | 26 | Foi criada uma pasta `.git` e é ali que toda a mágica acontece, então não apague 27 | 28 | * `git add README.md` para colocar o arquivo na área de stagging 29 | ![Source](img/staging.gif) 30 | 31 | Esse `add` é necessário antes de darmos o commit. 32 | 33 | * `git commit -m "primeiro commit"` dar o commit no repositório. 34 | 35 | * `git branch -M "main"` para alterar o nome da branch principal de `main` para `main` (isso é uma boa prática atualmente recomendada) 36 | 37 | ## Interfaces Git 38 | 39 | Beleza, recebemos a confirmação de que o commit aconteceu, mas isso tá um pouco abstrato ainda né? 40 | Existem algumas [interfaces legais do git](https://git-scm.com/downloads/guis) que você pode fazer o download para poder visualizar como está o projeto, o que foi alterado em cada commit, quando foi alterado etc. 41 | Aqui eu vou mostrar pra vocês a usarem direto no Github. 42 | 43 | ## Repositório no Github 44 | 45 | * Depois de você ter criado a sua conta na plataforma, você irá em `Criar novo repositório` 46 | 47 | Você vai preencher com as informações do projeto, então dar o nome do repositório, colocar uma breve descrição e criar 48 | 49 | ![Source](img/new-repository.png) 50 | 51 | Logo depois vai aparecer essa página um pouco cinza e confusa e com vários comandos (pode até perceber que alguns deles já usamos), mas o que você tem que fazer é bem simples, apenas copie o link que aparecer para você 52 | 53 | ![Source](img/quick-setup.png) 54 | 55 | * Para passar o commit do meu repositório local (da minha máquina) para um repositório na plataforma do Github, usamos o `git remote add origin ` 56 | 57 | * `origin` é o nome utilizado para referenciar o nosso repositório 58 | 59 | Agora já temos o nosso repositório local conectado com o respositório do Github, porém o `commit` que damos na máquina não sobe automaticamente para a plataforma 60 | 61 | * Para isso precisaremos empurrar, enviar para lá com o `git push -u origin main` 62 | 63 | Agora se recarregarmos a página iremos ver o nosso arquivo aqui na plataforma! 64 | 65 | ## Alterando e adicionando arquivo 66 | 67 | Beleza, agora que temos o nosso repositório no Github configurado direitinho, podemos usar e abusar do que o Git oferece, afinal é pra isso que estamos utilizando ele né? 68 | Primeira coisa que faremos então é alterar esse arquivo que já commitamos 69 | 70 | * Adiciona mais uma frase no arquivo `Essa é uma alteração` 71 | 72 | * Além disso iremos criar um novo arquivo `Projeto.md`, onde escreveremos `Esse é o arquivo onde desenvolverei o meu projeto` 73 | 74 | * Agora então precisamos subir essa alteração, pra isso seguiremos os mesmos passos de `git add .` (agora ponto `.` pois adiciona todos os arquivos) e `git commit -m "Primeira alteração"` 75 | 76 | * Lembrando que para alterar algo no nosso respositório do Github precisamos dar o push, então `git push origin main` (sem o -u) 77 | 78 | Se olharmos agora o nosso código no Github, ele terá sido alterado, e não só isso, se clicarmos no nome do `commit`, podemos ver exatamente as alterações que foram feitas nele. 79 | 80 | ![Source](img/commit1.png) 81 | 82 | Aqui nesse botão poderemos ver todos os commits já feitos anteriormente, então se clicarmos em algum deles, veremos exatamente o que havia sido alterado, além de claro, vermos o código como era. Incrível né? 83 | 84 | ![Source](img/commit2.png) 85 | 86 | O verde com `+` e o vermelho com `-` mostra, os conteúdos que foram adicionados e editados dentro do código. 87 | ![Source](img/commit3.png) 88 | 89 | ## Branch 90 | 91 | Até agora tudo o que fizemos de alterações e mandamos de commit, foi na nossa `main`, que é aquela linha do tempo principal. 92 | Agora vou mostrar pra vocês como criamos uma branch e depois como que juntamos ela com o código que já está na `main` (lembrando que ela é uma linha cronológica adicional/alternativa a principal) 93 | E outra, a branch pode ser criada tanto para quando você for fazer uma alteração em um arquivo, quando para adicionar outro arquivo dentro do projeto ou mesmo excluir. 94 |
95 | Obs. *Lembrem que eu estou aqui editando um arquivo markdown, porém isso tudo vale para qualquer tipo de arquivo com qualquer extensão* 96 | 97 | * Nesse caso vamos adicionar um novo arquivo para desenvolver a nossa feature `Flow-Git` 98 | 99 | * Então a primeira coisa que fazemos é `git checkout -b "dev"`, assim criando uma branch para ele 100 | Esse comando além de criar a branch já entra nela com o checkout, inclusive se olharmos agora aqui no meu VSCode, estamos dentro dela. 101 | ![Source](img/checkout1.png) 102 | 103 | * Vou então criar o arquivo, criar o `flow-git.md` "aqui eu crio o arquivo" 104 | 105 | ![Source](img/new-arquivo.png) 106 | 107 | * E agora fazemos o passo a passo que já sabemos, colocamos a nossa alteração em stagging com o `git add .` e commitamos com o `git commit -m "novo arquivo"` 108 | 109 | * Para enviarmos agora que vai ser diferente. Vocês lembram que utilizávamos o `git push orgin main` né? Porém main era aquela branch principal. Agora então usaremos `git push origin dev` 110 | 111 | ![Source](img/new-branch.png) 112 | 113 | Agora se olharmos o nosso Github, veremos que tem 2 branches, a `main` e a `dev` 114 | 115 | ![Source](img/new-branch1.png) 116 | 117 | Vamos supor que eu ainda não tivesse terminado de desenvolver, eu poderia continuar tranquilamente na branch `dev` até terminar! 118 | 119 | Mas Ramps, e se eu precisasse por algum motivo voltar naquela branch `main` e desenvolver a partir do que deixei lá? Sem problemas, a única coisa que você precisa fazer nesse caso é `git checkout main`, e pra voltar depois é só `git checkout dev` novamente 120 | 121 | Beleza! Agora desenvolvi tudo o que queria aqui na branch `dev`, como que junto ela com a main sem conflitos? É através do merge, vejamos abaixo! 122 | 123 | ## Merge 124 | 125 | * Agora o que precisamos fazer é ir para a nossa branch principal `git checkout main` e lá faremos o merge com a branch `dev` que criamos, com `git merge dev` 126 | 127 | Pronto, agora tudo o que tinha de alteração na branch `dev` juntou com a `main` 128 | 129 | ![Source](img/checkout2.png) 130 | 131 | * Para finalizar então, vamos jogar lá no Github isso tudo com o `git push origin main` 132 | 133 | ## Clone 134 | 135 | Como vocês podem baixar meu código? 136 | 137 | Sempre que você entrar em um repositório, seja o seu ou o de qualquer outra pessoa, terá esse botão `Code`, que quando você clica aparece um link: 138 | 139 | ![Source](img/code.png) 140 | 141 | * Você irá copiar esse link e levar ele lá pro nosso terminal 142 | 143 | * O comando para puxar o projeto para a sua máquina é o `git clone https://github.com/flowramps/workshop-github.git` 144 | 145 | Não é necessário criar um repositório antes disso, como fizemos anteriormente com o `git init`. Dessa vez, basta abrir o terminal e clonar o projeto e tudo aparecerá! 146 | 147 | ## Pull 148 | 149 | E se eu fizer uma alteração no repositório, como vocês podem atualizar na máquina de vocês? 150 | 151 | * Basta vocês executarem o comando `git pull`, ele irá puxar todas as alterações feitas no repositório do Github para o seu repositório local 152 | 153 | ## Fork 154 | 155 | Mas Ramps quando eu fiz o clone do seu repositório ele não apareceu no meu Github. 156 | Existe a ferramenta `fork`, que é bem mais simples para fazer isso 157 | Você só precisa apertar nesse botão dentro do repositório e sucesso jovem! Ele aparece automaticamente lá na sua conta: 158 | 159 | Clica e faça o teste pra você ver como vai ficar! 160 | 161 | ![Source](img/fork.png) 162 | 163 | ## Pull request 164 | 165 | O último conceito que quero ensinar para vocês é o de Pull Request ou como falamos de `PR`, vamos entender como ele funciona: 166 | 167 | * Após você ter dado um fork no projeto e ele ter ido pra sua conta, você poderá alterar o projeto e adicionar as funcionalidades que deseja 168 | 169 | * Você pode por exemplo dar um fork no meu repositório de `workshop-github` e ir melhorando o conteudo do seu `README.md` ou adicionar mais conteúdos que possam ajudar a comunide em seu desenvolvimento por exemplo nessa página. 170 | 171 | * Depois disso, você poderá salvar o projeto, dar o `git add .`, `git commit -m "trecho PR"` e `git push origin main` como vimos nos passos anteriores. 172 | 173 | Quando você for olhar o seu Github, verá que existe uma mensagem parecida com a seguinte: 174 | ![Source](img/pr.png) 175 | 176 | Isso significa que a branch do seu repositório está 1 commit "na frente" da branch original 177 | 178 | O que você deve perceber agora é esse botão que aparece em seguida: 179 | 180 | ![Source](img/pr1.png) 181 | 182 | Ele servirá para caso você deseje enviar para o dono do repositório original uma solicitação de pull, ou seja, fazer com que ele puxe as alterações que você fez no seu repositório para o repositório dele, original 183 | 184 | Ao clicar nesse botão, você será direcionado para uma página que fará a avaliação se esse `pull request` terá conflitos ou não com o código no repositório original. Caso não tenha, bastão clicar no botão de `Create pull request` 185 | 186 | ![Source](img/pr2.png) 187 | 188 | Você irá colocar um nome intuitivo, que demonstre a funcionalidade adicionada e o ideal é que você também crie uma boa descrição do que desenvolveu, não somente explicando o que é, mas ensinando ao dono do repositório original a forma como ele poderá testar também 189 | 190 | Depois disso, basta esperar para que o dono da branch original aceite o seu pull request 191 | 192 | ## Finalização 193 | 194 | Existem diversas outras funcionalidades do Git e do Github, porém tenho certeza que com tudo isso que vocês viram hoje vocês já conseguem desenvolver um projeto de uma forma bem legal 195 | 196 | Recomendo sempre vocês darem uma olhada na [documentação do Git](https://git-scm.com/doc), pois qualquer dúvida que apareça pode ser respondida por lá na explicação 197 | 198 | **Não esqueçam de deixar o like e se inscrever no [canal do Youtube](https://www.youtube.com/@EstudandoDevops) ** 199 | 200 | E aproveitando já aperta o Star para fortalecer o repo! 201 | 202 | ![Source](img/star.png) 203 | 204 | Até a próxima... 205 | 206 | 207 | ![Source](img/comandos.gif) 208 | 209 | ## Configurações Globais 210 | 211 | * Configurar o editor padrão e a branch inicial 212 | ``` 213 | git config --global core.editor vim 214 | git config --global init.defaultBranch main 215 | ``` 216 | * Visualizar as configurações globais 217 | ``` 218 | cat ~/.gitconfig 219 | ``` 220 | * Configurar o editor do sistema para uso global com o Vim 221 | ``` 222 | git config --system core.editor vim 223 | ``` 224 | ## Inicialização de Repositório 225 | 226 | * Inicializar um repositório Git 227 | ``` 228 | git init 229 | ``` 230 | ## Gerenciamento de Arquivos 231 | 232 | * Adicionar um arquivo para ser rastreado 233 | ``` 234 | git add arquivo.txt 235 | ``` 236 | * Desfazer a adição de um arquivo 237 | ``` 238 | git reset 239 | ``` 240 | * Efetuar um commit 241 | ``` 242 | git commit 243 | ``` 244 | ## Gerenciamento de Commits 245 | 246 | * Adicionar e commitar alterações de forma rápida 247 | ``` 248 | git commit -a -m "Commit rápido para arquivo.txt" 249 | ``` 250 | * Visualizar o histórico de commits 251 | ``` 252 | git log 253 | ``` 254 | * Visualizar o histórico de um arquivo específico 255 | ``` 256 | git log -p arquivo.txt 257 | ``` 258 | * Reverter para um commit específico 259 | ``` 260 | git checkout 2cc62bbe0f7fcfb4483df968fb169dc85e01cfa4 261 | ``` 262 | * Reverter para a branch principal 263 | ``` 264 | git checkout main 265 | ``` 266 | * Desfazer o último commit sem perder alterações 267 | ``` 268 | git reset --soft HEAD~1 269 | ``` 270 | * Desfazer o último commit e descartar alterações 271 | ``` 272 | git reset --hard 273 | ``` 274 | ## Ignorando Arquivos 275 | 276 | * Utilize o arquivo .gitignore para especificar quais arquivos não devem ser incluídos no repositório. 277 | 278 | ## Gerenciamento de Branches 279 | 280 | * Criar uma nova branch 281 | ``` 282 | git branch feature/novo_arquivo 283 | ``` 284 | * Mudar para uma branch específica 285 | ``` 286 | git checkout feature/novo_arquivo 287 | ``` 288 | * Mudar o nome da branch atual 289 | ``` 290 | git branch -m novo_nome 291 | ``` 292 | * Deletar uma branch 293 | ``` 294 | git branch -D nome_da_branch 295 | ``` 296 | ## Merge 297 | 298 | * Criar uma nova branch e efetuar o merge 299 | ``` 300 | git checkout -b stg 301 | git checkout main 302 | git merge stg 303 | ``` 304 | * Deletar uma branch após o merge 305 | ``` 306 | git branch -d stg 307 | ``` 308 | ## Rebase 309 | 310 | * Atenção: O uso de rebase pode reescrever o histórico, use com cuidado. 311 | ``` 312 | git rebase stg 313 | ``` 314 | ## Cherry Pick 315 | 316 | * Selecionar commits específicos de uma branch e aplicá-los em outra 317 | ``` 318 | git log 319 | git cherry-pick 5801dac2c67519a4041666421149877c39439a20 320 | ``` 321 | ## Git Tag 322 | 323 | * Listar todas as tags 324 | ``` 325 | git tag 326 | ``` 327 | * Criar uma tag 328 | ``` 329 | git tag -a v2.0 -m "Versão 2.0" 330 | ``` 331 | * Adicionar uma tag a um commit específico 332 | ``` 333 | git tag -a v1.0 -m "Versão 1.0" 5801dac2c67519a4041666421149877c39439a20 334 | ``` 335 | * Visualizar detalhes de uma tag 336 | ``` 337 | git show v2.0 338 | ``` 339 | * Deletar uma tag 340 | ``` 341 | git tag -d v2.0 342 | ``` 343 | ## Trabalhando com repositório remoto 344 | 345 | * Criar e commitar em uma nova branch 346 | ``` 347 | git checkout -b branchnova 348 | git add . 349 | git commit -m "Aletração em arquivo main.txt (teste remoto)" 350 | ``` 351 | * Realizar o merge na branch principal e fazer o push 352 | ``` 353 | git branch main 354 | git checkout main 355 | git merge branchnova 356 | git push 357 | ``` 358 | ## Lidando com conflito 359 | 360 | * Realizar fetch e validar/listar branches existentes 361 | ``` 362 | git fetch origin 363 | git branch -r 364 | ``` 365 | * Realizar checkout na branch remota e validar diferenças 366 | ``` 367 | git checkout origin/main 368 | git diff main origin/main 369 | ``` 370 | * Realizar merge após ajustes e commit 371 | ``` 372 | git checkout main 373 | git merge origin main 374 | git commit -a -m "Merge commit fetch" 375 | git push 376 | ``` 377 | ## Git Log 378 | 379 | * Diversas opções de visualização do histórico 380 | ``` 381 | git log --oneline 382 | git log 383 | git log --stat 384 | git log --n 385 | git log --graph --oneline 386 | git log --author="msrampasso" 387 | git log --after="1 week ago" 388 | ``` 389 | ## Publicação 390 | 391 | * Adicionar, commitar e fazer push para a branch main 392 | ``` 393 | git add . 394 | git commit -m "Script para validação cn - azure e ops" 395 | git push origin main 396 | ``` 397 | Espero que este guia seja útil para entender e utilizar o Git de forma eficiente. Sinta-se à vontade para personalizar conforme necessário. 398 | 399 | -------------------------------------------------------------------------------- /flow-git.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/flow-git.md -------------------------------------------------------------------------------- /img/checkout1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/img/checkout1.png -------------------------------------------------------------------------------- /img/checkout2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/img/checkout2.png -------------------------------------------------------------------------------- /img/code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/img/code.png -------------------------------------------------------------------------------- /img/comandos.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/img/comandos.gif -------------------------------------------------------------------------------- /img/comandos.gif:Zone.Identifier: -------------------------------------------------------------------------------- 1 | [ZoneTransfer] 2 | ZoneId=3 3 | ReferrerUrl=https://www.canva.com/ 4 | HostUrl=https://export-download.canva.com/MSXds/DAF3i1MSXds/15/0-2154259441288276383.gif?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJHKNGJLC2J7OGJ6Q%2F20231220%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231220T060348Z&X-Amz-Expires=56954&X-Amz-Signature=9d09d670ee394662f7f9949c41178744de2d23df9b460f2970254f568b7eda3b&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%2A%3DUTF-8%27%27Comandos.gif&response-expires=Wed%2C%2020%20Dec%202023%2021%3A53%3A02%20GMT 5 | -------------------------------------------------------------------------------- /img/commit1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/img/commit1.png -------------------------------------------------------------------------------- /img/commit2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/img/commit2.png -------------------------------------------------------------------------------- /img/commit3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/img/commit3.png -------------------------------------------------------------------------------- /img/fork.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/img/fork.png -------------------------------------------------------------------------------- /img/fork1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/img/fork1.png -------------------------------------------------------------------------------- /img/new-arquivo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/img/new-arquivo.png -------------------------------------------------------------------------------- /img/new-branch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/img/new-branch.png -------------------------------------------------------------------------------- /img/new-branch1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/img/new-branch1.png -------------------------------------------------------------------------------- /img/new-repository.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/img/new-repository.png -------------------------------------------------------------------------------- /img/pr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/img/pr.png -------------------------------------------------------------------------------- /img/pr1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/img/pr1.png -------------------------------------------------------------------------------- /img/pr2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/img/pr2.png -------------------------------------------------------------------------------- /img/quick-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/img/quick-setup.png -------------------------------------------------------------------------------- /img/staging.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/img/staging.gif -------------------------------------------------------------------------------- /img/staging.gif:Zone.Identifier: -------------------------------------------------------------------------------- 1 | [ZoneTransfer] 2 | ZoneId=3 3 | ReferrerUrl=https://www.canva.com/ 4 | HostUrl=https://export-download.canva.com/S9e5U/DAF3eRS9e5U/2/0-7801773291089527509.gif?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJHKNGJLC2J7OGJ6Q%2F20231219%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231219T035057Z&X-Amz-Expires=86077&X-Amz-Signature=b2f1cc10aa0757d98e6b4b4223b10ee2591a2f084f9fe5252e3ce075504fab53&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%2A%3DUTF-8%27%27Design%2520sem%2520nome.gif&response-expires=Wed%2C%2020%20Dec%202023%2003%3A45%3A34%20GMT 5 | -------------------------------------------------------------------------------- /img/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flowramps/workshop-github/937be33ed99242e4441e3be38cb28cd06667e6f0/img/star.png --------------------------------------------------------------------------------