- 1. Curso de git
Git é um sistema de controle de versão open-source, ou seja, gratuito. Ele é utilizado para a criação de um histórico de alterações em código-fonte de projetos de desenvolvimento de software. Foi desenvolvido por Linus Torvalds, o criador do sistema operacional Linux.
Através dele podemos desenvolver projetos na qual diversas pessoas podem contribuir simultaneamente no mesmo, editando e criando novos arquivos e permitindo que os mesmos possam existir sem o risco de suas alterações serem sobrescritas, além de saber quais foram as alterações realizadas, quem fez cada uma das alterações e baixar essas mudanças em nossa máquina. E caso seja necessário, revertê-las para uma versão anterior.
- Windows: https://git-scm.com/download/windows
- MacOs:
$ brew install git - Debian/Ubuntu:
$ apt-get install git - Fedora:
$ dnf install git - Gentoo:
$ emerge --ask --verbose dev-vcs/git - Arch Linux:
$ pacman -S git - openSUSE:
$ zypper install git
- Commit: Realiza uma mudança no projeto; mais específicamente, armazena uma mudança no banco de dados de uma forma que possa ser incorporada em versões futuras.
- Update: Solicitar que as mudança dos demais commits sejam incorporadas em sua cópia local do projeto.
- Branch (Ramo): Uma cópia do projeto, porém isolada de uma maneira que as mudanças realizadas no branch não afetem o resto do projeto e vice-versa, exceto quando as mudanças são delibaradamente mescladas
- Repositório: Onde armazena-seo histórico do projeto.
- Diretório de Trabalho: É um diretório monitorado pelo controle de versão que contém os arquivos do projeto.
- Configuração: É o estado dos arquivos do projeto.
- Revisão: É uma configuração registrada no
- repositório.
- Rastreabilidade: É poder seguir o trajeto de uma solicitação de mudança desde que foi proposta até o momento que voi implementada.
- Changeset: Diferença entre duas configurações.
- Versão: Revisão usada em produção.
- Merge: Aplica os commits de uma branch para a branch atual, encontra um commit em comum entre as branches (base) e adiciona os commits que a branch atual não posui (caso não existam) em um commit de merge.
- Rebase É semelhante ao merge porém é diferente no modo em que os commits são aplicados. No rebase, os commits a frente da base são temporariamente removidos e os commits da outra branch são aplicados, por os commits da branch são adicionados.
- Fetch: Baixa as atualizações do remoto, mas não aplica elas.
- Tags: Uteis para definir versões do projeto, semelhante as branches porém não recebe mais commits, guardando um estado do repositório.
- Registro da evolução do projeto;
- Controle de concorrência;
- Variações do projeto.
É uma das ferramentas mais importantes do desenvolvimento de software.
Serve para:
- Manter histórico do projeto;
- Controlar a concorrência de edição;
- Manter váriações do projeto.
- Sistema: É o mais abrangente vale para todos os usuários e repositórios, geralmente é usado em servidores de repositórios.
- Global: Vale para todos os repositórios do usuário, a configuração deste nível sobreescreve a configuração de sistemas.
- Local: É o mais específico e vale apenas para o repositório que está sendo usado, sobreescrevendo as configurações dos outros níveis. A configuração do nível local costuma ser gerada automaticamente durante a clonagem ou inicialização do repositório, geralmente contém o caminho original para o repositório que é usado na sincronização de repositórios e etc.
- Local:
repositório/.git/config - Global:
$HOME/.gitconfig - Sistema:
/etc/gitconfig
- Editar
- Commitar
- Sincronizar com o repositório
| Estado | Stage |
|---|---|
| Não Monitorado | Untracked |
| Modificado | Modifield |
| Preparado | Staged |
| Consolidado | Commited |
git config --global user.name nomeDefinir nome do usuário.git config --global user.email email@email.comDefinir e-mail do usuário.git config --global core.editor editorDefinir editor de texto.git config --listListar todas as configuraçõesgit config --list --globalLista todas as configurações globais.git config --global --editAbre o arquivo de configurações para edição.git config --global credential.helper storeSalva as credênciais do git.
git initInicializa um novo repositório.git init --bareindica que é um repositório "puro", ou seja, com tém apenas as alterações dos arquivos, e não uma cópia delesgit statusMostra o estado dos arquivos dentro do repositório.git logLista todos commits feitos no repositório.git log --graphLista todos commits feitos no repositório junto com a reprentação dos branches.git show commitMostra as informaçãoes do commit.git add <arquivo>Adiciona determinado arquivo para o estado de staged.git add .Adiciona todos os arquivos para o estado de staged.git commit -m "mensagem"Guarda uma versão para o repositório.git commit --amendAltera o último commit, tanto a mensagem de commit quanto a adição de arquivos.git pushEnvia os commits para um repositório remoto.git diffApresenta as diferenças entre commits.git diff HEAD~1Mostra as diferenças da versão atual (HEAD) com a versão anterior.git blame <arquivo>Mostra as alterações feitas em um arquivo linha por linha. Mostra o autor e o commit onde foi feita aquela linha.
git remoteLista o nome dos repostórios remotos configurados para o repositŕio local.git remote -vLista o nome dos repostórios remotos configurados para o repositŕio local, e mostra os endereços de cada remoto.git remote add <nome> <local>Adiciona um repositório remoto. O local pode ser uma URL, o IP de uma máquina na rede ou até um diretório local.git remote rename <nome atual> <novo nome>Renomeia o repositório remoto.
git clone https://github.com/usuario/repositorio.gitBaixa o repositório remoto, serve como uma maneira alternativa de inicializar um repositório e já vem com o remote configurado.git pullBaixa as alterações do repositório remoto que não se encontram no repositório local. mantem o repositório sincronizado com os ultimos commits de uma branch.git checkout <commit> --arquivoPermite ver o estado de um arquivo ou todo o diretório em um determinado commit.git checkout --arquivoIgnora as mudanças feitas no arquivo que não estejam em staged.git checkout HEAD --arquivoDesfaz todas as alterações até o ultimo commit incluindo os arquivos em staged.git revert <commit>Cria um novo commit desfazendo as alterações de um commit específico.git resetReseta o repositório para um determinado commit (por padrão, usa-se --soft).git reset --softIgnora o commit, mas as modificações no arquivo continuarão e o mesmo se encontra no estado de staged.git reset --mixedIgnora o commit, mas o arquivo estará no estado de modifiedgit reset --hardIgnora tudo no commit.
git bisectFaz a busca entre determinados commits em que a alteração desejada foi alteradagit bisect startInicia a buscagit bisect bad <commit>Estado em que o código possuí algum bug ou erro (Inicio da busca)git bisect good <commit>Informa o estado desejadogit bisect badInforma o estado não é desejadogit bisect resetretorna para a branch
git branchLista todas as branches.git branch <nome>Cria uma nova branch.git branch -d <nome>Remove uma branch.git checkout <branch>Altera para uma branch.git merge <branch>Faz o merge entre as branches.git rebase <branch>Faz o rebase entre as branches.git rebase --continuePassa para o próximo commit (caso tenha mais conflitos)git rebase --abortAborta todo o processo de rebasegit fetchFaz o fetch no repositório.git tag [nome tag]Cria uma tag.git push <remoto> <tag>Envia a tag para o repositório remoto.git fetch origin pull/<ID>/head:<branch>faz o checkout de um PullRequest.git stashGuarda as alterações do Working Directory. Permite fazer o rebase, marge e trocar de branch sem a necessidade de fazer um commit.git stash listLista os stashes.git stash popAplica o último stash.git cherry-pick <commit>Aplica as alterações de um commit na branch atual.
masterOnde fica o código em produçãodevelopmentOnde todas as novas features são mergeadasfeature/<nome-da-feature>Nessas branches, devem ser adicionadas as novas funcionalidades do sistema, que no fim, irão paradevelopment.hotfix/<versão>Onde será criado as correções de bugs que ocorrem na produção, por padrão essas branches partem damaster.release/<versão>Onde será enviado o código de homologação.
- Configura os arquivos que devem ser ignorados.
- Contém arquivos, caminhos e patterns.
.project, .jar, .zipIgnora arquivos com uma determinada extenção..[jw]arUsa uma expressão regular para ignorar arquivos de uma determinada extenção.dist/Ignora diretórios.**/log/Ignora qualquer diretório que tenha um subdiretório semenhante ao específicado.**/*.cssIgnora qualquer caminho que termina com um arquivo de uma determinada.
- Nunca faça o commit de um código que não funciona.
- Um commit pode ser realizando quando:
- Um bug for solucionado
- Uma feature foi adicionada
- Após a realização de uma tarefa
- No fim do dia
- Todas esses cenários são válidos desde que o código esteja em funcionamento
