- Sistema de controle de versão
- Ajuda a controlar versões de projetos
- Permite o acesso à todas as alterações feitas em um projeto
- Permite o acesso ao histórico de todas as versões do projeto
- Cria pontos específicos no tempo
- Resolver problemas de controle de versão manuais
- Permite o abandono de cópia e renomeação de pastas e arquivos
ao serem alterados
- Permite o abandono de cópia e renomeação de pastas e arquivos
Instalando o Git
- Após a instalação, o comando
git
estará disponível no terminal
- Deve ser selecionado ao instalar ou reinstalar o sygwin, na opção
'devel $ default'
git --version
mostra a versão do Git instaladagit
mostra alguns comandos de ajudagit init
inicia um repositório do git- Cria um diretório
.git
oculto no diretório atual - Esse diretório permite a inicialização e criação de históricos de
alterações dos arquivos
- Cria um diretório
git status
mostra o status da árvore atual do git- Pode ser utilizado a qualquer momento 1
- Mostra todos os arquivos alterados desde o último commit
- Mensagens
- "Changes not staged for commit" indica que um arquivo já
adicionado à staging area anteriormente foi modificado. Ou seja,
o arquivo já faz parte do repositório .git, mas possui alterações - "Changes to be committed:" indica que desta vez, há alterações
a serem commitadas - Caso um novo arquivo tenha sido criado após o último commit,
o arquivo será mostrado como 'untracked'. Ou seja, o arquivo ainda
não está na staging area
- "Changes not staged for commit" indica que um arquivo já
- São arquivos que foram criados e ainda não foram adicionados à staging
area e nem fazem parte do.git
directory - Se um arquivo que já faz parte da staging area for alterado, a mensagem
é que o arquivo foi modificado - Se um arquivo ou pasta é criado e deletado sem ter sido adicionado à
staging area (git add
), ao dar umgit status
, o arquivo não será
mostrado como deletado - O git, por padrão, não faz commit de diretórios vazios
- É necessário que o diretório tenha, pelo menos, um
arquivo
- É necessário que o diretório tenha, pelo menos, um
- Working Directory
- É o diretório atual em que se está trabalhando
- A primeira etapa a ser feita é adicionar o arquivo deste estágio para
o estágio 2 (Staging Area)
- Staging Area
- Momento em que os arquivos foram adicionados, onde o próximo passo é
commitá-los (incluí-los) no.git
directory
- .git directory (Repository)
- Este repositório é local, fica apenas na máquina que está sendo
usada. Ninguém tem acesso ao repositório. - Guarda todo o histórico de commits do projeto
- Passa arquivos do Working Directory para o Staging Area
- Aceita vários arquivos por parâmetro, separados por espaço:
git add <file1> <file2>
- Aceita vários arquivos por parâmetro, separados por espaço:
- Após executado, caso um git status seja declarado, será exibida
uma mensagem 'changes to be commited', ou seja, a mensagem já não
é de untracked files como anteriormente - Ou seja, agora o arquivo foi adicionado na staging area, mas
ainda não faz parte do .git directory (repositório)
- Adiciona todos os arquivos alterados no Working Directory para
o Staging Area - Não adiciona arquivos deletados
- Os comandos abaixo precisam ser setados apenas uma única vez
- Não é por projeto, é apenas uma única vez
- Essas configurações irão valer para todos os projetos do git
- Ficarão listadas no histórico
- Diz para o git **quem ** está colocando o arquivo no repositório
.git
- Informa o email de quem colocou está colocando o arquivo no
repositório .git
- Lista as configurações
- Verifica se os comandos setados funcionaram corretamente
- algumas propriedades possíveis
user.name
- Mostra meu nome de usuário cadastrado
user.email
- Mostra meu e-mail cadastrado
core.editor
- Mostra o editor de texto padrão para a edição de mensagens
de commits
- Mostra o editor de texto padrão para a edição de mensagens
- Se este comando for executado, o editor de texto será aberto
para que a mensagem de commit possa ser editada- Edição possível:
- Título da mensagem de commit (1ª linha)
- Corpo da mensagem de commit
- Pode ser uma lista:
- Item 1
- Item 2
- Item 3...
- Edição possível:
- Permite detalhar melhor o que foi feito naquele commit
- Após editar a mensagem e dar um
git log
, o commit mais
organizado é mostrado no terminal- Muito importante ao usar o GitHub
- No Windows, o recomendado é o Vim
i
entra no insert mode, para que o código / mensagem seja
inseridaesc
sai do modo de inserção:wq + enter
sai do vim
- Passa o arquivo da staging area para o .git directory
- Limpa o working directory
- Ideal para mensagens pequenas
- O
git commit
(sem-m
) deve ser usado para mensagens
detalhadas
- O
- A mensagem a ser colocada deve ser informativa, que diga
exatamente qual alteração foi feita e porque ela foi feita - Após a execução do comando, serão mostradas uma hash que foi
criada para o commit, a mensagem informada, a quantidade de
arquivos e linhas alteradas, e o arquivo que foi criado - Se o
git status
for executado após o commit, uma mensagem
dizendo que o working directory está limpo será mostrada
- Permite visualizar todos os commits adicionados no
repositório .git (histórico)- Cada commit mostrado é uma versão do projeto
- Mostra uma hash que representa o commit feito, o nome e
e-mail de quem fez o commit, a data e horário e a mensagem - O commit mais recente fica na parte superior da listagem
- Além das informações presentes no
git log
padrão, exibe,
o nome dos arquivos que foram alterados ou excluídos, além do
hash do commit, autor, data e mensagem de commit- A: add. Arquivos que foram adicionados
- M: modified. Arquivos que foram modificados
- D: deleted. Arquivos que foram deletados
- Auxilia a visualização em casos onde é necessário voltar ao
histórico do projeto
- Mostra os os commits de forma "bonitinha", em uma única linha
- Mostra apenas o texto do commit
- Abrevia a mensagem de commit
- Exibe apenas os 7 primeiros caracteres das hashs dos commits
- Exibe algumas estatísticas do log
- Exibe as alterações feitas nos arquivos
git log -p -3
exibe a quantidade de commits especificada por
parâmetro
- É possível combinar, por exemplo, o
--pretty=oneline
com o
abbrev-commit
:git log --pretty=oneline --abbrev-commit
- Exibe os commits em uma única linha, de forma abreviada
- Ao modificar um arquivo anteriormente commitado para o
.git directory, essas alterações do arquivo voltam para o
working directory, mas, como o arquivo foi adicionado anteriormente,
o git sabe que ele foi adicionado ao .git directory - Cada alteração feita nesse tipo de arquivo move o arquivo de
volta para o working directory - Se um
git status
for executado nesse momento, os arquivos
modificados serão mostrados
- diff: diferença de tudo o que foi feito no arquivo
- Permite visualizar as modificações entre os arquivos que
estão no working directory e no staging area, desde o último
git add
- Permite visualizar as alterações feitas apenas do arquivo
especificado
- Mostra as alterações entre os arquivos de staging area e git
directory - Comumente usado após o git add
- Exibe as alterações feitas entre commits
- É permitido colocar apenas os primeiros 7 caracteres da hash do commit
- Para saber quais alterações foram feitas desde o primeiro commit
até último, basta especificar o primeiro commit como parâmetro:
git diff hashPrimeiroCommit
- Para comparações entre 2 commits, basta passar a hash do commit
mais recente como primeiro parâmetro e a hash do mais antigo como
segundo parâmetro
- - e Vermelho: Linha removida
- + e Verde: Linha adicionada
- Linhas que serão adicionadas no próximo
git add
- Linhas que serão adicionadas no próximo
- Amarelo: arquivos que foram modificados e não foram adicionados
à stagin area- Indica que o momento atual é o working directory
- A cada alteração pequena e simples, é necessário fazer um commit
- O recomendado é fazer um commit após uma pequena lógica
implementada, por exemplo - Isso permite voltar, facilmente, no tempo
- Permite a visualização do que foi feito de data x até data y
- O recomendado é fazer um commit após uma pequena lógica
- A demora em fazer commits não é benéfica para o projeto
- É importante entender que commits marcam breakpoints
- Pontos específicos no tempo, no histórico, que é onde
é possível voltar
- Pontos específicos no tempo, no histórico, que é onde
- TCC
- Em um TCC, em que várias alterações são requeridas,
é uma ótima ideia commitar as alterações- Se algo que foi apagado precisa ser reescrito, por
exemplo, o que foi apagado estará no histórico do Git
- Se algo que foi apagado precisa ser reescrito, por
- Em um TCC, em que várias alterações são requeridas,
- Trabalhos acadêmicos
- Imagens
- Neste caso, não é possível visualizar as alterações
diretamente, no terminal
- Neste caso, não é possível visualizar as alterações
- Qualquer coisa na vida que precise de um histórico
- Se simplesmente um arquivo do diretório atual (working
directory) for deletado, ao rodar o git status, é exibido que
o arquivo foi deletado
- Remove o arquivo do
.git
directory - Após isso, um git status mostra que o arquivo foi removido e
que há alterações que precisam ser commitadas- Ou seja, o git add e o git status são utilizados para
adicionar ou remover aquivos da staging area - Se deleted estiver verde e a menensagem "changes to be commited
é mostrada", significa que já posso commitar
- Ou seja, o git add e o git status são utilizados para
- A remoção do arquivo é adicionada, mas a ação que está sendo
feita é a remoção de um arquivo - Mas, o arquivo está no histórico
- Executando o comando
git log --name-status
- Executando o comando
- Ao remover o arquivo apenas com o
rm nomeArquivo
e executar um
git status
, é mostrado que há mudanças que não estão no stage area,
ou seja, não foram commitadas
- É possível localizar, no histórico (
git log
), um commit que
ainda possua o arquivo deletado, executar umgit diff
com a
hash desse commit, e ver, em vermelho, as linhas do arquivo
excluído
- Faz com que todas as ações que foram feitas no working directory
sejam adicionadas- Arquivos novos
- Arquivos deletados
- Arquivos modificados
- Evita o uso do
git add arquivo
pro arquivo modificado egit rm
para os arquivos deletados
- Força o commit de um arquivo que esteja no
.gitignore
- Ignora alguns arquivos do repositório
- Arquivos que, mesmo sendo necessários no projeto,
não devem ser commitados, por exemplo - Estes arquivos devem ser adicionados ao
.gitignore
echo "node_modules" >> .gitignore
- Arquivos que, mesmo sendo necessários no projeto,
- Deve estar na raiz do projeto
- Arquivo conhecido, no mundo do Linux, como dot file
- Lembrando que, no Linux, todos os arquivos que
começam com.
são ocultos
- Lembrando que, no Linux, todos os arquivos que
- Para adicionar múltiplos arquivos e pastas, basta inserir
os nomes apenas com quebra de linhas - É importante que os arquivos não tenham sido adicionados
à staging area antes de serem listados no.gitignore
Exemplo em arquivos node JS:
- Para se trabalhar com o node, primeiramene é necessário um arquivo
package.json
- Ao criar esse arquivo, e executar um
git status
, é mostrada uma
mensagem dizendo quepackage.json
não foi adicionado à staging area
e não faz parte do.git
directory (untracked file) - Existem arquivos do node que precisam existir no projeto, mas não
é necessário que eles sejam versionados - Se o Gulp é instalado localmente, por exemplo, com o comando
npm i --save-dev gulp
- Ele irá baixar o gulp, criar um diretório
node_modules
e, nesse
diretório, haverá o projeto do gulp disponível para ser utilizado no
meu projeto local - O
package.json
, após um pacote do node ser instalado, o pacote
é adicionado automaticamente como dependência do projeto- Para instalar as dev dependencies do node, basta executar
npm install
e ele irá instalar os pacotes que estão dentro
dopackage.json
- Ou seja, geralmente, o node_modules não precisa ser versionado
no projeto.
- Para instalar as dev dependencies do node, basta executar
- Ele irá baixar o gulp, criar um diretório
- Então, após a instalação, o git status mostra que
node_modules
e
package.json
são arquivos não-trackeados - É possível remover, a
node_modules
e, tudo o que tiver como
dependência de desenvolvimento dentro depackage.json
pode ser
instalado novamente com o comandonpm install
- Ou seja, o projeto pode ter apenas o
package.json
. O
node_modules
não é necessárionode_modules
possui muitos arquivos que irão deixar o projeto
grande
- Ou seja, o projeto pode ter apenas o
- Sempre que esse projeto precisar ser baixado, basta executar o
npm install
e, automaticamente, o npm irá criar anode_modules
já com as ferramentas que eu preciso, dentro dele - Porém, como o node_modules é necessário enquanto eu estiver
desenvolvendo
- Um exemplo recorrente é o commit do
node_modules
- Se o arquivo que não era para ser commitado for incluído no
.gitignore
após o commit e, ogit add
for executado novamente,
aparentemente está tudo ok.- Ao instalar um outro módulo e executar
git log --name-status
,
é mostrado que onode_modules
continua no.git
repository - É possível utilizar
rm -r node_modules
- Ao executar o git status, é mostrado que
node_modules
está sendo deletado - Agora, ao dar um
git add -A
e um git status, é mostrado
quenode_modules
foi deletado do.git
directory - Então, é possível commitar, passando a mensagem de que
node_modules
foi removida - Agora, caso um pacote seja instalado e a node_modules criada,
nada será adicionado ao.git
directory, pois node_modules já
está no.gitignore
- Se após os passos acima, o arquivo que estiver listado no
.gitignore
não poderá mais ser adicionado com ogit add
, e
uma mensagem de erro será exibida
- Ao executar o git status, é mostrado que
- Ao instalar um outro módulo e executar
- Se o arquivo que não era para ser commitado for incluído no
git rm -rf nomeArquivo --cached
- Removendo um arquivo da staging area sem deletá-lo do working directory
- Se a node_modules for commitada para a staging area, acidentalmente,
é possível removê-la sem a necessidade de deleta-la do diretório atual
(working directory)- Útil quando já houver vários módulos instalados
- Após a execução do comando, o arquivo será removido do
.git
directory
e será listado como untracked, no git status
- Adicionar o nome do arquivo no
.gitignore
- Remover o arquivo da staging area
git rm nomeDoArquivo --cached
ou, no caso de diretórios,
git rm -rf nomeDoArquivo --cached
- --cached não deletará o arquivo ou diretório do working directory
- Ao dar um git status, é mostrado que o arquivo foi deletado
- Um git diff --staged pode ser executado para confirmar
- Agora o arquivo não é mais mostrado como untracked
git commit -a -m "message..."
ou git commit -am "message..."
, no Linux - Pulando a etapa de commitar um arquivo para a staging area
- Caso o arquivo alterado já faça parte do .git directory,
o comando fez o commit e a adição - É um comando perigoso. É recomendado, sempre, usar o
git add nomeArquivo
ougit add .
e depois ogit commit -m "mensagem"
- É possível colocar um arquivo .gitignore na pasta de usuário
- windows: (c/Users/roger)
- unix:
touch ~/.gitignore
~
representa a pasta de usuário
- Incluir arquivos a serem ignorados
- Ao dar um git status, o arquivo incluído no .gitignore
ainda é mostrado como untracked
- Ao dar um git status, o arquivo incluído no .gitignore
- Para funcionar, é necessário executar o comando abaixo
git config --global core.excludesfile /cygdrive/c/Users/roger/.gitignore
- Configurando um .gitignore
padrão para todos os projetos presentes na máquina
- Na primeira vez que executado, não mostra nada, pois ainda não
há excludes file nele - Posso então configurar, no meu diretório de usuário, o
core.excludesfile, passando como parâmetro o .gitignore de
usuário:git config --global core.excludesfile /cygdrive/c/Users/roger/.gitignore
- O core.excludesfile disse para que o git configurasse um
.gitignore
padrão para todos os projetos instalados nessa
máquina- É possível portanto, ignorar o node_modules de todos
os projetos nesta máquina, sem a necessidade de ficar
adicionando ele no.gitignore
de cada arquivo - Ideal para arquivos específicos recorrentes
- É possível portanto, ignorar o node_modules de todos
- Agora, ao dar um git status, os arquivos listados no
.gitignore da pasta de usuário fez com que esses arquivos
fossem ignorados no working directory
- O core.excludesfile disse para que o git configurasse um
- Ramificações do projeto
- Cada ramificação é uma cópia do projeto
- Servem para os casos em que é necessário criar, por exemplo,
uma nova feature no projeto- Exemplos:
- Adicionar CSS em um componente
- Criam um ambiente separado do ambiente principal (master)
- Exemplos:
- Evitam que alterações sejam feitas na branch master, pois ela
é a branch padrão do git, a branch que apresenta o ambiente
final - São criadas com base na branch atual
- A branch será criada com o mesmo conteúdo e histórico da
branch atual - Os arquivos também serão "copiados" (na verdade, serão
referenciados)
- A branch será criada com o mesmo conteúdo e histórico da
- Tudo o que é alterado em uma branch, não afeta a outra, pois
cada branch é um ambiente completamente separado - É importante não trabalhar na branch principal, mesmo ao
trabalhar sozinho- Fazer com que cada branch seja uma feature a ser adicionada
no projeto - A branch master deve conter apenas o conteúdo mais atualizado
possível - Possibilidades e recomendações:
- Criar uma branch 'dev', que será a branch padrão para
desenvolver e criar alterações no projeto. Essa branch, deve
ser tratada como a branch master de desenvolvimento. Tudo o
que é beta deve estar nela.- Baseado na branch dev, é possível criar uma branch chamada
'js', por exemplo, onde serão feitas features em JavaScript - Após codar a feature, dar um git commit
- Se for o momento, um git checkout pode ser executado
para a branch 'dev' e a branch js pode ser mergeada com
a branch dev
- Se for o momento, um git checkout pode ser executado
- Ou seja, é possível editar os arquivos de javascript em
uma branch específica para eles. O mesmo acontece com o
html e css.
- Baseado na branch dev, é possível criar uma branch chamada
- O que deve ser mergeado para a master são apenas as
coisas finais do projeto. Ela será sempre a versão mais
estável do projeto. A versão final.- Assim, se der algum problema ou qualquer tipo de erro, o
erro não ficará na master
- Assim, se der algum problema ou qualquer tipo de erro, o
- Criar uma branch 'dev', que será a branch padrão para
- Fazer com que cada branch seja uma feature a ser adicionada
- Lista as branches existentes no projeto
- Cria uma nova branch, baseada na branch em que eu estava
anteriormente- Os da logs da branch anterior permanecem na nova branch.
Os arqiuvos também são os mesmos.
- Os da logs da branch anterior permanecem na nova branch.
- Caso a branch já exista, uma mensagem de erro será exibida
e a branch não será criada
- Troca de branch
- Atalho que cria e já acessa uma branch
-b
= branchcheckout
= muda de branch
- Renomeia uma branch
- É necessário estar dentro da branch a ser renomeada
- Remove uma ou múltiplas branches
- Útil em casos onde é necessário apagar branches de features que
já foram mergeadas na branch principal (dev)
- Cria e troca para uma nova branch vazia
- Útil em casos onde é necessária a criação de um histórico novo ou
é desejável manter duas diferentes estruturas no projeto. Exemplo:- Uma com o código do projeto em si
- Outra com os arquivos estáticos do site do projeto
- Como os dois casos acima fazem parte do mesmo projeto, não é
necessário criar um repositório separado para cada um
- A branch não será baseada em alguma outra
- O git log estará limpo, os arquivos saem do estado do git
repository e vão para o staging area, como se tivessem acabado de
terem sido adicionados com o git add- Há a opção de reutilizar os arquivos (commitar) ou removê-los
com ogit rm -rf .
, para remover todos os arquivos da staging
area - Lembrando que a nova branch orfã nunca será mergeada com a branch
principal
- Há a opção de reutilizar os arquivos (commitar) ou removê-los
- Estando na branch master, git merge recebe o nome da branch
a ser unida à master
- O conceito de ter repositórios é a possibilidade de centralizar
os arquivos em um só lugar, para que outras pessoas também possam
colaborar com o projeto - Possibilita que as alterações feitas sejam enviadas para um local
onde haja um gerenciamento de todo o histórico dos commits do projeto- O repositório possibilita que Designers, Front-end developers e
Back-end developers trabalhem no mesmo repositório
- O repositório possibilita que Designers, Front-end developers e
- Repositórios devem ter o mesmo nome do projeto, com
.git
no final - Lembrando que, na maior parte dos casos, o repositório não será local,
como neste exemplo didático, mas sim, no GitHub.- Não faz sentido manter o projeto em um repositório local, ao
invés de hospedar no GitHub
- Não faz sentido manter o projeto em um repositório local, ao
- Cria um repositório no git, ao ser executado dentro diretório que será
o repositório do projeto (exemplo abaixo, ao falar sobregit clone
) - Ao listar os arquivos e diretórios do repositório, é notável que ele
não criou um diretório.git
, pois na verdade, este repositório já é,
teoricamente, um diretório.git
- Ele cria, no repositório, basicamente a mesma estrutura de
diretórios de um diretório.git
- Ele cria, no repositório, basicamente a mesma estrutura de
- Este repositório
.git
nada mais é do que o próprio repositório do
projeto, porém, de forma local - Ao executar esse comando, o repositório
.git
criado é um caminho
aonde é possivel enviar os arquivos do projeto e centralizá-los
- Deve ser executado dentro do diretório do projeto
- Por convenção, o repositório do projeto é chamado de 'origin'
- Linka o repositório do projeto com o repositório
.git
do projeto
(my-project.git) - No repositório
.git
, ao executar o comandopwd
, será retornado
o caminho do repositório onde os arquivos devem ser inseridos
- Exibe os repositórios origin fetch e o origin push
push
: empurrar<branch>
: nome da branch a ser sincronizada- Empurra para o origin o que está na branch (histórico)
- Irá criar, no repositório, uma branch com o mesmo nome da branch
atual do projeto, ou, apenas sincronizar a branch, caso ela já
exista no repositório
- Irá criar, no repositório, uma branch com o mesmo nome da branch
Exemplo:
git push origin master
- Empurra para a branch master do origin (my-project.git), tudo o
que está na branch de trabalho atual - Todas as branches podem ser enviadas para o repositório origin
- Empurra para a branch master do origin (my-project.git), tudo o
- Clonar um repositório é uma das vantagens em manter um repositório
onde outras pessoas possam acessá-lo - Exemplo:
- Tenho uma pasta chamada time. Dentro dela, outras pastas de cada
membro do time + a pasta 'servidor', onde irá ficar o repositório
.git
do projeto - Dentro da pasta 'servidor', posso criar um repositório
ecommerce.git
, com o comandomkdir ecommerce.git
- Dentro da pasta
ecommerce.git
, posso executar o comando
git init --bare
- A partir de agora,
ecommerce.git
será o repositório principal,
onde as coisas do projeto serão compartilhadas - Posso então sair da pasta deste repositório (
ecommerce.git
) e
voltar 2 níveis, para acessar a pasta 'time' e então, acessar a
minha pasta 'roger' - Dentro da minha pasta, que representa meu computador local, posso
criar o diretório principal do ecommerce e começar a trabalhar nele.
Existem duas formas de se criar este repositório:- Executar o
mkdir ecommerce
, acessá-lo e, dentro dele, iniciar
um repositório.git
com o comandogit init
- Agora, é só linkar o meu repositorio
ecommerce
com o
repositório que está no servidor. - Posso então executar um
pwd
dentro do repositório do servidor,
para copiar o caminho dele. - Agora, basta estar dentro desse meu repositório
ecommerce
e
executar o comandogit remote add origin <caminhoDoRepoDoServidor>
- Feito isso, ao executar o comando
git remote -v
, é mostrado o
caminho do repo do servidor, que é listado como 'origin'
- Executar o
- Para clonar este repositório no computador de outros membros do
time, basta dar umpwd
na pastaecommerce.git
, copiar o caminho
e, dentro da pasta da 'ana', por exemplo, executar um
git clone caminhoDoEcommerce.git
e o repositório será clonado
dentro de um diretórioecommerce
, dentro da pasta da ana- Feito isso, ao executar o comando
git remote -v
, dentro do
diretórioecommerce
é mostrado o caminho do repo do servidor,
que é listado como 'origin'
- Feito isso, ao executar o comando
- Agora, os dois membros do time, Roger e Ana, podem fazer alterações,
trabalhando no mesmo projeto e fazendo push no repositório principal,
que é o repositório do servidor (ecommerce.git
)- Agora, qualquer alteração feita no repositório 'roger' não
irá refletir, obviamente, no repositório da ana
- Agora, qualquer alteração feita no repositório 'roger' não
- Agora, se roger faz uma alteração e dá um push pro repositório
remotoecommerce.git
e ana altera um arquivo e faz um push
também, ana visualizará a mensagem dizendo que o push dela foi
rejeitado, pois o repositório local dela não está atualizado- Não é possível enviar uma alteração para o repo remoto sem
pegar o arquivo atualizado
- Não é possível enviar uma alteração para o repo remoto sem
- Tenho uma pasta chamada time. Dentro dela, outras pastas de cada
- Puxar
- Garante que eu esteja com a última versão atualizada do projeto
- Após puxar os arquivos atualizados do repositório remoto, é possível
então dar um push com as alterações locais feitas - Ao trabalhar em equipe, antes de alterar qualquer arquivo e dar um push para o servidor ou repo remoto, sempre executar em meu computador, ou pasta local, o comando
git pull origin master
, para que as alterações sejam baixadas para meu repositório local- Isso garante que, antes de começar a trabalhar, os arquivos
estarão atualizados
- Isso garante que, antes de começar a trabalhar, os arquivos
- Ao contrário de um controle de versão centralizado, o repositório
principal não fica bloqueado quando alguém está fazendo alterações
em um arquivo - Permite trabalhar de forma descentralizada. Apenas o repo principal
será um lugar centralizado - É possível que duas ou mais pessoas editem os mesmos arquivos, pois
o git irá trabalhar com o sistema de auto merge dele
- Usar uma branch por feature
- Usar apenas em commits que não foram pusheados para o repo principal
- Usar apenas em casos onde seria ideal que um detalhe que foi
utilizado no último commit sem push fosse inserido no commit - Em casos onde a última alteração feita no arquivo poderia
ser commitada junto com o commit mais recente (exemplo:
ajustou o título da página, commitou e depois apenas reindentou
um bloco de código), é possível:- copiar a hash do último commit
- dar um git add no arquivo alterado
- executar um git commit e, após a mensagem do commit, utilizar
o parâmetro--amend
git commit -m "Ajusta título a página e indentação" --amend
- Ao utilizar este comando, o último commit é sobrescrito
- Evita sujar o histórico com um commit de algo que não é
significativo e não precisava estar ali - Requer muito cuidado caso o push para o repositório principal
já tenha sido executado- Se o amend for utilizado para um commit já existente no repo
principal, haverá um conflito no commit e será gerado um tipo
de problema que terá que ser resolvido manualmente
- Se o amend for utilizado para um commit já existente no repo
- O automerge entre o mesmo arquivo em diferentes branches funciona
apenas para linhas de código distantes umas das outras - O problema não é trabalhar no mesmo arquivo em que a outra pessoa está
trabalhando, mas sim, em linhas de código próximas umas das outras ou
na mesma linha - Digamos que meu arquivo
style.css
seja alterado, adicionado
com ogit add .
e commitado, na branch 'dev' - Feito isso, irei para a branch master. Na branch master, as
alterações feitas no arquivo, na branch 'dev', não foram
refletidas na branch atual (master) - Irei, à partir da branch master, criar e acessar uma nova
branch chamada 'altera-cor-texto' e fazer uma outra alteração
no mesmo arquivo css - Após alterar, irei dar um
git add .
e umgit commit -m "..."
- Ou seja, agora, o mesmo arquivo css tem uma alteração na branch
'dev' (tamanho do texto) e outra alteração na branch
'altera-cor-texto' (cor do texto) - Na branch 'dev' o texto está com 18px e na branch
'altera-cor-texto' o texto ainda com 14px - Se, na branch 'dev', for executado um
git merge altera-cor-do-texto
,
será exibida uma mensagem de conflito no arquivostyle.css
- Se um
git status
for executado após isso, será exibida uma
mensagem dizendo que um arquivo foi modificado por duas branches - Ao executar um
git diff
, é mostrado que a branch HEAD (atual)
possui linhas de código diferentes em relação à branch
'altera-cor-texto' (imagem abaixo)
- Neste caso, como é um código pequeno, é possível acessr o arquivo,
deixar apenas o código correto e fazer o commit normalmente
- Primeira solução: abortar o merge, com o comando
git merge --abort
, após a exibição do conflito, o git
irá tentar abortar o merge feito.- Após isso, ao executar um
git status
, é exibido que
o working directory está limpo e o arquivo está com as
alterações anteriores
- Após isso, ao executar um
- Próxima solução: analisar o código que possui os sinais
de '+' (imagem abaixo) em relação ao que possui os sinais
de '-' e identificar o que foi alterado
- Então, neste caso, como é um código pequeno, basta ir no
arquivo css, copiar a alteração de cor da branch
'altera-cor-texto', colá-la no código da branch atual,
remover o código da branch 'altera-cor-texto' e remover os
códigos<<<<<HEAD
e>>>>> branchname
que o conflito
gerou no arquivo - Agora, ao dar um
git diff
, a atualização do código é
mostrada - Então, posso adicionar e commitar o arquivo, com uma mensagem
especificando que o conflito de cor foi resolvido - Agora, ao dar um
git status
, é exibido que a branch já
está funcionando normalmente - Então, agora é possível acessar a branch master e mergear
a branch 'dev' nela, com ogit merge dev
Outro tipo de problema:
- Faço uma alteração no
<title>
de um arquivo html, na branch principal - Adiciono e commito a alteração, dou checkout para a branch 'dev'
- Na branch 'dev', faço uma alteração no mesmo arquivo html,
em outra parte dele (adiciono a tag footer) - Adiciono e commito a alteração
- Faço o merge da branch master na branch 'dev'
- Agora o git conseguiu fazer o automerge
- Ou seja, tenho as duas alterações feitas no arquivo
- O Git, por padrão, possui uma ferramenta para automatizar a resolução
de conflitos
- Ao executar o comando
git config -l
, é exibida a possibilidade de
configuração da merge tool:merge.tool=vim
- Para alterar a ferramenta de vim para meld, é necessário executar o
comandogit config --global merge.tool meld
- Após isso, ao executar um
git config --list
, é exibido que agora
a merge tool é o meld:merge.tool=meld
- Após isso, é necessário, no Windows, seguis os passos abaixo:
- After installing it
- I had to tell git where it was:
- git config --global merge.tool meld
- git config --global diff.tool meld
- git config --global mergetool.meld.path "C:\Program Files (x86)\Meld\meld\meld.exe"
- And that seems to work. Both merging and diffing with "git difftool"
or "git mergetool"
- Agora, ao dar conflito de arquivo, basta executar o comando
git mergetool
- Será exibido o arquivo em que o merge está sendo feito e uma
mensagem de aguardo da confirmação para o uso do meld - Após isso, uma interface será aberta
- Janela 1:
- Alterações feitas no meu repo local
- Janela 2:
- Como o arquivo irá ficar
- Janela 3:
- O arquivo remoto (a outra branch que foi mergeada)
- Para selecionar quais alterações devem permanecer, basta clicar
nas setas das janela 1 ou 2 - Ao terminar, é só salvar e fechar
- É importante perceber que ele cria alguns arquivos temporários,
que ficam no meu repo local do projeto - Ao dar um
git status
, são exibidas as modificações do arquivo - Para ignorar os arquivos que o meld criou, como eles ainda não
estão adicionados na staging area, basta adicioná-los no.gitignore
echo "*.orig" >> .gitignore
inclui, no .gitignore, todos os
arquivos.orig
gerados pelo meld
- Janela 1:
- Será exibido o arquivo em que o merge está sendo feito e uma
- Ao alterar um arquivo, se ele não tiver sido adicionado à staging area
com ogit add
, basta executar este comando e as
alterações feitas no commit anterior estarão de volta
- Na branch master, faço uma alteração no title do index.html e
dou um tab à mais nas tags internas do body - Ao executar um git diff, são exibidas as alterações do título e
dos espaços adicionados- Só que alterações de espaçamento, geralmente, não são importantes,
para a visualização
- Só que alterações de espaçamento, geralmente, não são importantes,
- Este comando mostra o que foi alterado no arquivo, ignorando
qualquer alteração que tenha apenas espaçamento adicionado
- Ao executar um
git log --oneline
, são mostrados todos os commits
da branch - Se eu quiser voltar em algum deles, basta executar o
git checkout <commit>
,
passando por parâmetro o número do commit - Ao voltar, se o
git log --oneline
for executado, apenas os commits
feitos até aquele ponto serão visualizados - Os commits anteriores não foram perdidos
- Ao dar um
git checkout master
, o projeto volta para a
posição onde ele estava (presente)
- Ao dar um
- É possível fazer alterações em um commit passado e manter essas
alterações. Basta criar uma nova branch- É como se essa nova branch fosse baseada à partir desse commit
do passadogit checkout -b voltando-no-tempo
- Depois de criar essa nova branch, é possível fazer as alterações
necessárias nela e depois mergear essa branch com a master:git checkout master
git merge voltando-no-tempo
- Assim, é possível pegar alterações feitas naquele arquivo e jogá-las
para a master - Ou fazer coisas que ficaram para trás, foram apagadas mas é necessário
voltar nessas implementações - Esse é um dos exemplos de como mensagens legíveis de commit podem ser
cruciais para o projeto - E importante também que cada commit possua apenas uma implementação
- É como se essa nova branch fosse baseada à partir desse commit
- Apenas o
git checkout <branch>
irá mudar de branch - Este comando dá um checkout para a branch
<branch>
e já cria
outra branch baseada nela <branch>
é a branch em que a nova branch criada será baseada- É interessante também em casos onde é necessário voltar no log
- Ao invés de passar apenas
git checkout <hash>
, é possível
concatenar o-b <new_branch>
- Ou seja, já vai criar uma branch baseada em um commit do passado
- Ao invés de passar apenas
- Mantém alterações não comitadas em uma lista para que estas
alterações sejam acessadas novamente depois - Salva o working directory em um estado
- Ao executar um git status, é exibido que o working directory
está limpo- As alterações não comitadas desaparecem dos arquivos,
mas não foram perdidas
- As alterações não comitadas desaparecem dos arquivos,
- Ideal para features que estão em desenvolvimento, não devem ser
commitadas, mas é necessário salvar as alterações feitas para
mudar para uma outra entrega mais urgente - Não deixar muitos stashes
- Exibe um work in progress com a branch da feature que estava
sendo desenvolvida no momento em que ogit stash
foi executado - O stash 0 é sempre o mais recente
- Se neste momento uma alteração for feita
- Volta as alterações feitas até o momento do
git stash
- Após terminar o job mais urgente, voltar para a branch da
feature menos urgente, que estava sendo desenvolvida, e executar
este comando - Aplica sempre o stash mais recente
-
Ideal para alias no bash
-
Exibe o log com o seguinte formato:
- hash abreviada do commit (
%h
) - Espaços e traço (
-
) - Nome do autor do commit (
%an
- author name) - Há quanto tempo foi feito o commit (
%ar
) - Título do commit (
%s
)
- hash abreviada do commit (
-
Tabela de possíveis logs personalizados:
Conhecendo o GitHub
- O papel do GitHub é substituir o repositório local do projeto (que
pode estar um servidor, por exemplo)
- A maneira ideal é iniciar um novo repositório dentro do GitHub
- Copiar a url do repo no github
- Acessar diretório do projeto local, dentro da pasta do usuário
- Dar um
git remote -v
e conferir se o origin já está configurado - O origin será alterado para apontar para o github
- Para que quando o push for feito, ao invés de enviar para o repo
local, os arquivos sejam enviados para o github
- Para que quando o push for feito, ao invés de enviar para o repo
- Requisitos:
- Estrutura:
git remote set-url origin https://github.com/Roger-Melo/anotacoes-git
- Verificar se foi modificado, com o
git remote -v
- O link
commits
, com o ícone do relógio, é praticamente um git log de
forma visual - Ao clicar no nome do commit, são mostradas as alterações feitas nos
arquivos - O sinal de
+
no hover das linhas possibilita adicionar comentários [1]- Ao comentar, o comentário fica marcado no repositório para que possa
ser compartilhado com outras pessoas [2] - É marcado quem fez, a hora do comentário e o comentário [3]
- Ao clicar no 'just now' do comentário, é possível copiar a url e
compartilhar o comentário com outras pessoas [4]
- Ao comentar, o comentário fica marcado no repositório para que possa
- O botão browse files exibe a lista de arquivos alterados, naquele commit
específico [5]- O botão com o ícone
<>
faz a mesma ação
- O botão com o ícone
[1]
[2]
[3]
[4]
[5]
[6]
- É como se fosse um like / favorito
- Gera uma lista de favoritos
- Faz uma cópia do repositório em questão para a minha conta do GitHub
- Ideal para casos em que irei colaborar com projetos de outras pessoas
- Submete as alterações feitas no repositório forcado para o dono do
repo principal
- Submete as alterações feitas no repositório forcado para o dono do
- Documenta as versões do projeto
- Documenta problemas encontrados no repo
- É possível marcar usuários, mencionando o
@
deles. A pessoa receberá
a notificação da marcação via e-mail ou notificações do github - Podem ser vistas como uma to-do list
- Possiilita a atribuiçãod e issues específicas para cada pessoa
- Ao clicar na barra colorida abaixo do nome do projeto, é possível
visualizar quais e quanto de cada linguagem foi utilizada no projeto - Ao clicar no nome da linguagem, é possível visualizar uma lista com
todos os arquivos do projeto que utilizam essa linguagem
- Requer uma chave SSH no computador, para que esse formato possa
funcionar - Em casos de não possuir chave SSH ou não quiser criar, clonar repos
com o HTTPS
- Basta inserir
close #<issueId>
junto da mensagem do commit- Exemplo
git commit -m "change language to pt-br - close #3
- Exemplo
- Ao dar um push nesse commit, automaticamente a issue será fechada
- Cada issue possui um ID [1]
- Que é mostrada também no fim da url do browser, da página da issue
[1]
- Para enviar uma branch para o repo no Github, basta dar um push nela,
da mesma forma feita com a branch mastergit push origin <branchName>
- Na págia do repo, ao acessar o link branches e dar um hover nos números
da branch [1], é mostrado quantos commits dessa branch estão à frente ou
atrás da branch master
[1]
- Clicar no botão 'New pull request' [1]
- Selecionar branches a serem comparadas [2]
[1]
[2]
É uma solicitação de merge.
Ao criar um pull request, as alterações feitas na branch 'compare' serão
mergeadas na branch 'base'
Após criar um pull request, para saber o que foi alterado, basta
clicar no link de commits. Será exibido um log de commits com as
diferenças entre as branches que estão sendo comparadas.
- Mudar a branch local para master
git pull origin master
- Puxa as alterações da branch master do repositório origin
A vantagem de fazer isso pelo GitHub é que, se uma branch for deletada
acidentalmente, é possível restaurá-la
Útil em casos onde todas as branches já mergeadas devem ser deletadas
- É possível deletar a branch no GitHub através da linha de comando,
com os comandos:git push origin <branch> --delete
- ou
git push origin :<branch>
- A diferença é que ao deletar branches do github pela linha de comando,
não há como restaurá-las
- Há uma configuração que pode ser feita para evitar a necessidade de digitar
a senha em todos os repos ao dar push - Funciona com os repos que estão sendo utilizados com https
- Para salvar a senha, basta digitar o comando:
git config --global credential.helper cache
- Agora, na próxima vez em qua a senha for digitada, ela será cacheada
- O Git irá criptografar e guardar a senha no computador local
- Vale apenas para a máquina atual
- Útil para usar o git em um computador não seguro
git config --global **--unset** credential.helper
- O parâmetro
--unset
remove a propriedade que foi configurada pelo usuário- Útil em casos onde a propriedade deve ser removida ou no momento
da configuração foi digitada de forma errada e deve ser removida - Funciona para qualquer propriedade ou configuração listada em:
git config --global --list
- Útil em casos onde a propriedade deve ser removida ou no momento
- O parâmetro
- Útil em casos onde se está trabaçhando em um pc temporário
- Sintaxe:
git config --global credential.helper 'cache --timeout=3600'
- O formato de valor é em segundos (3600 = uma hora)
- A senha não será solicitada na próxima uma hora
- São apenas as pessoas que fizeram commits para o repo
- Dá algumas informações sobre o repo
- Ao renomear um repo, ao acessá-lo com a url antiga, pelo browser, é
feito um redirect automático para a página do repo já com o novo nome
- Cria um gerenciador de páginas com o repo do GitHub
- Não executa arquivos dinâmicos, como sites em PHP, Java, .Net, etc
- Ferramenta de integração contínua
- Mantém o código sempre funcional
- Possibilita uma configuração que rode testes, por exemplo, antes de
fazer um merge para a branch principal
- Servem para permitir que, em um momento específico, o CI acesse o
GitHub em questão- Exemplos:
- Ativar o CI quando o pull request for feito diretamente no repo
- Ativar o CI quando alguém tentar dar um merge de uma outra branch
para a master
- Exemplos:
- Chaves SSH
- Permitem que o deploy seja feito diretamente para o repo, adicionando
computadores específicos
- Link acessado em 'settings'
- É o local onde é possível subir as chaves SSH para que o acesso ao repo
seja liberado, sem a necessidade de digitar user name / senha - Com a chave SSH, é fornecida uma segurança à mais, pois, permite criar
uma chave SSH e com ela, - O SO possui duas chaves:
- Pública: é a chave que é adicionada no GitHub
- Privada: é a chave que fica no computador local
- Ao tentar fazer uma conexão com uma ferramenta que está utilizando SSH,
para fazer a validação de login, essa ferramenta irá pegar a chave pública,
baixar para o pc local, fazer a comparação com a chave privada e, se as
duas chaves baterem (não são iguais, mas possuem um código que fazem elas
baterem), o site concede a autorização de acesso - É possível adicionar várias chaves SSH em vários computadores
- Todos os pcs que tiverem a chave SSH privada, que bater com a chave
pública, vão ter acesso aos repos do github
- Todos os pcs que tiverem a chave SSH privada, que bater com a chave
- É uma forma mais legível de se escrever HTML.
- Converte o texto para HTML
- Pode ser usado em issues e pull requests no GitHub
- Também aceita HTML
- Basta quebrar a linha 2x, com o
enter
- Se a linha for quebrada uma vez, um
<br>
é inserido- 2 espaços também inserem um
<br>
- As duas maneiras dependem do editor de texto
- 2 espaços também inserem um
<https://github.com/Roger-Melo>
<mailto:[email protected]>
- Basta utilizar a
\
\_link_\
> Citação aqui
- Para fazer parágrafos, basta inserir o
>
nas próximas linhas,
dependendo do editor de texto
- Para fazer parágrafos, basta inserir o
- Útil para citar o que uma pessoa falou em uma issue, por exemplo

- Os dados necessários são thead e td
- Os
:
indicam o alinhamento do texto
Este é um TD | Exemplo de tabela |
---|---|
Um td | Outro td |
Um td | Outro td |
Úteis em issues onde há vários pontos específicos de um só tópico
e não é necessário quebrar em várias issues
- Tarefa um
-
Tarefa dois
---
, entre quebras de linha
- Espaço para a criação de pequenos trechos de código em qualquer linguagem,
para compartilhar, ou não, com outras pessoas - Gistis públicos ficam liberados para qualquer pessoa visualizar, na home
do meu gist - Gists secretos são acessíveis apenas para quem tem a url
- Funciona basicamente como um repo separado
- Arquivos com prefixos numéricos ficam no topo da listagem de gists
- O GitHub organiza os Gists em ordem alfabética
- Sempre colocar um README.md para o Gist
- Ideal para códigos pequenos, em que não é necessário fazer um repo
- É possível embedar um gist, ou seja, é possível inserir os trechos de código
em uma página HTML- Assim é possível escrever um artigo e inserir trechos de código,
através dos gists
- Assim é possível escrever um artigo e inserir trechos de código,
git config --list
git config --global --list
git config --global user.name
git config --global user.email
- Se não há a permissão de commitar diretamente no repo principal,
é necessário fazer um fork- Quando o projeto é open source, geralmente isso é feito comumente
- Verificar se o origin está apontando para o diretório do servidor
git remote -v
- Copiar o link HTTPS do repo forkado, no github
- Setar uma nova url
git remote set-url origin <linkHttps>
- Verificar se a substituição ocorreu, ou seja, se o origin fetch e
push estão apontando para o repo forkado do githubgit remote -v
- É necessário adicionar o repo principal (que possui outro dono)
como um segundo repo para mim (usuário Roger), pois eu irei ter o
origin, que é o meu repo principal (forkado), e irei ter esse
segundo repo, que irá se chamar upstreamgit remote add upstream <httpsRepoPrincipal>
git remote -v
para verificar se o repo origin é o forkado
e o upstream é o repo principal (que possui outro dono e que
o time inteiro irá trabalhar)- Dessa forma, se eu tiver permissão, posso enviar alterações
diretamente para o upstream do outro dono. Se eu não tiver
permissão, posso enviar as alterações para o meu repo forkado
do github (origin) e depois enviar pull request para o repo
upstream
- Para obter as alterações atualizados do repo upstream, ou seja,
sempre ter a última versão, para que eu comece a trabalhar com
esse repo, utilizar o comando que irá baixar na memória do git
todas as atualizações do repo principal (upstream):git fetch upstream
- Irá mostrar quais são as alterações das branchs do repo
principal que eu não tenho localmente - Agora a memória local do git foi atualizada
- Irá mostrar quais são as alterações das branchs do repo
- Fazer um merge da branch de onde quero pegar a atualização
na minha branch principal:git merge upstream/master
- Executar um
git log
para verificar qual é o último commit - Executar um
ls - la
para visualizar os novos arquivos e
pastas
- Acessar a página do arquivo
- Clicar no número da linha
- Fazendo isso, a linha ficará e a url da página muda [1]
- É possível segurar o shift e clicar em mais de uma linha
- Agora é só compartilhar a url
[1]
- Um tipo de workflow é criar uma branch apenas para desenvolvimento
('dev')- Será a branch 'master' para desenvolvimento. A branch principal.
Nada entrará nela se não estiver 100% ok - Deve ser criada no repo principal (upstream)
- Será a branch 'master' para desenvolvimento. A branch principal.
- Para ter e manter a branch dev no meu repo local:
- Executar um
git fetch upstream
- Esse comando irá puxar para a memória o que houver de diferente
no repo principal (upstream) - Se a branch dev foi criada no repo upstream, ela será exibida
como retorno deste comando, indicando que essa branch não existe
no meu repo local
- Esse comando irá puxar para a memória o que houver de diferente
- Executar um
git checkout upstream/dev -b dev
, para que uma nova
branch 'dev' seja criada baseada na branch dev do upstream
- Executar um
- Nunca fazer alterações diretamente nas branches dev ou master. Nunca
commitar alterações nelas- Mas todo o código que eu fizer, deve ser baseado na branch dev
- A branch baseada na branch dev também deve ser subida para o repo
principal (upstream) no Github- Mandar o pull request da branch:
- Clicar no botão de fazer pull request
- Fazer com que a branch base seja a dev
- Editar título e mensagem do pull request
- Marcar / solicitar que um outro desenvolvedor faça o code review
do pull request - Ao digitar
:
, sugestões de emojis irão ser exibidas - Novos comentários pode ser criados após o pull request ter sido
enviado
- Marcar / solicitar que um outro desenvolvedor faça o code review
- Lembrando: o pull request é uma requisição de pull
- Após revisado, clicar no botão de fazer o merge
- Deletar a branch que já foi mergeada com a dev (irá deletar apenas do
github)
- Mandar o pull request da branch:
- No terminal, voltar para a branch dev
- Ao invés de fazer um merge da branch da feature que acabei de codar com
a branch dev, executar umgit fetch upstream
e umgit merge upstream/dev
- Nunca mergear commits na dev em que a feature não esteja pronta
- Sempre commitar um arquivo criado
- Ao trabalhar e alterar um arquivo js, por exemplo, antes de dar um push
para o repo, executar umgit fetch upstream
e verificar se há alguma nova
alteração na branch dev. - Nunca utilizar uma branch já utilizada anteriormente
- Se o time utilizar um sistema como o trello, por exemplo, cada task criada
nessa ferramenta possui um nome ou código de referência. Talvez seja
interessante utilizar esse código de referência como nome da minha branch
para criar uma nova feature
- Se o time utilizar um sistema como o trello, por exemplo, cada task criada
- No repo que forkei, como não devo enviar o pull request para o meu repo,
e sim para o upstream, clicar no botão de compare pull request e setar o
repo base e a branch a fazer o pull:
- O botão 'Compare across forks' permite selecionar tanto o repo como
a branch para poder enviar o pull request - Sempre ao fazer um pull, solicitar um code review:
- Verificar se tenho acesso para fazer um merge desse pull request, após
a autorização do dono do repo upstream - Sempre que eu enviar um pull request para qualquer projeto, as únicas
alterações e commits que devem aparecer são as minhas [1]- Se alterações de outra pessoa também estiverem aparecendo, pode ser
que essa outra pessoa ainda não fez o merge, e isso pode causar conflito
no futuro
- Se alterações de outra pessoa também estiverem aparecendo, pode ser
[1]
- Uma possibilidade é enviar o push da alteração para o meu repo e,
se ele estiver sido forkado do repo principal, é possível fazer
o pull request para o repo upstream desta feature que codei - Quando o responsável pelo projeto responde com
-1
, por convenção
significa que a alteração feita no pull request não está de acordo
com algo dentro do projeto- Geralmente a resposta com o -1 vem com um direcionamento do que
fazer
- Geralmente a resposta com o -1 vem com um direcionamento do que
- Após fazer a alteração e fazer um push novamente, como a alteração
foi feita exatamente na linha onde o dono do repo principal comentou,
o github entende que, se aquela linha foi alterada, teoricamente o
problema foi resolvido:
- O github esconde os code reviews já resolvidos
- Pode ser um problema para ver se a pessoa escreveu mais comentários
- Podem ser linkadas ou utilizadas com o GitHub
- Ferramentas que mantém o deploy contínuo
- Não permite que os pull requests sejam mergeados se algum teste
quebrar ou se o build do repo quebrar, por exemplo - Garantem que o código sempre funcione
- Roda os testes e aoutras coisas que forem mandadas rodar no
projeto e, se tudo correr bem, um badgebuild passing
será
exibido - Monitora o projeto e não deixa com que outras pessoas façam
merge de algo que esteja quebrado
- Não permite que os pull requests sejam mergeados se algum teste
- Exemplos de CI: