Este projecto ser utilizado para estudar como é que o git/github funciona e treinar comandos GIT.
Os tópicos abordados neste projecto são:
- Utilização e funcionamento de um fork
- Funcionamento do git clone
- Funcionamento base de git localmente
- git add
- git commit
- Utilização de branch ("ramos")
- Utilização de várias maneiras de manuseamento de commits:
- git merge
- git cherry-pick
- git rebase
- Resolução de conflictos
- Utilização de TAGs para facilmente identificar commits específicos
- Utilização de Push e Pull requests
- Trabalho em equipa
Para clonar este repositório foi utilizado o seguinte comando:
git clone https://github.com/FilipeS0usa/algo-divergente.git
Para o primeiro commit foram utilizados os seguintes comandos:
git add README.md
git commit -m "Initial commit"
git push
git add para adicionar o ficheiro git commit para fazer o commit com a respectiva mensagem git push para enviar para o repositório remoto
- Foi criado um novo branch chamado FilipeBranch:
git checkout -b "FilipeBranch"
- Foi adicionado o ficheiro main.py, adicionei e fiz commit:
git add .
git commit -m "Added main.py and updated README.py"
git push
- O ficheiro main.py sofreu 3 updates diferentes:
git add main.py
git commit -m "Updated main.py"
- Voltou-se ao branch main, e utilizou-se o cherry-pick para escolher um commit especifico para ser aplicado no main. Neste caso escolheu-se o Update main.py 2:
git checkout main
git cherry-pick 178d02b
Devido ao ficheiro main.py não existir no branch main, houve um conflito. Para resolver este conflito foram efectuados os seguintes comandos:
- Primeiramente verificou-se se haviam algumas alterações nos ficheiros envolvidos no cherry-pick
cat main.py
cat README.md
- Como não havia nenhuma alteração nos ficheiros fez-se o seguinte comando para resolver o conflicto:
git add .
git cherry-pick --continue
- De seguida fez-se o merge do branch FilipeBranch com o main:
git merge FilipeBranch
Houve conflictos ao fazer o merge.
- Para ver quais eram os conflictos fez-se os seguintes comandos
cat main.py
cat README.py
- Para resolver os conflictos então editou-se o que era suposto editar e fez-se os seguintes comandos:
git add .
git commit -m "Solved merge conflict"
- Agora esta versão será a versão 1.0 do projecto. Ficando assim mais fácil de acompanhar as versões do projecto, para isso fez-se o seguinte comando:
git tag v1.0 5541754
- Por fim falta ainda usar o rebase, para isso vamos criar um novo branch thisIsRebase, fazer mais uns commits e fazer o respectivo rebase:
git checkout -b thisIsRebase
git add README.md
git commit -m "Updated README.md"
git add main.py
git commit -m "Added new feature to main.py"
git rebase thisIsRebase main
- Para clonar este repositório foi utilizado o seguinte comando:
git clone https://github.com/Grilinux/algo-divergente.git
-
A partir do fork que fiz no repositório do Silva.
-
Criei um ficheiro .py chamado codigoalmeida.py para ser revisto pelos colegas de grupo.
touch codigoalmeida.py
-
Fiz commit com esse comentário.
-
Criei um novo branch
git checkout -b "brunch_do_almeida"
-
Fiz mudanças no ficheiro codigoalmeida.py e voltei a dar commit.
-
Nova feature no codigoalmeida.py e novo commit.
git commit -m "nova feature super fixe no codigo"
-
Fiz
git checkout main
para puder fazer git cherry-pick de uma das versões do branch em que estava a trabalhar. -
Fiz
git cherry-pick b2e2f67
de uma das versões para o main. Houve conflitos que foram resolvidos eliminando as linhas sobrepostas entre as duas versões e depois de resolvidos os conflitos fizgit cherry-pick continue
. -
Fiz
git merge
entre os dois branchs. Resolvi conflitos no merge (eliminando as linhas que estavam sobrepostas entre as duas versões) -
Depois de resolvidos os conflitos fiz
git add .
egit commit -m "mensagem"
. -
Fiz um novo branch
git checkout -b novinho_brunch_almeida
-
Criei um novo ficheiro .py nesse branch chamado novinhocodigoalmeida.py
-
Dei commit desse ficheiro
-
Vou atualizando a documentação à medida que faço alguma coisa nova
-
Fiz rebase deste novo branch para o main
git checkout main | git rebase novinho_brunch_almeida
-
Introduzi uma tag num dos commits antigos como sendo a versão 1.0 do programa
git tag v1.0 755c038
-
Alterei o ficheito README.md no branch novinho_ brunch _almeida então tive que voltar ao main e fazer git merge
git checkout main | git merge novinho_brunch_almeida
Para colonar este repositório foi utilizado o comando:
git clone https://github.com/0Correia/algo-divergente.git
Foi cria do um novo branch chamado bcorreia com o seguinte comando:
git checkout -b "bcorreia"
De seguida criei uma novo ficheiro chamado featurecorreia.py e fiz alterações no ficheiro existente "main.py" Depois das alterções fiz commit:
git add main.py
git add featurecorreia.py
git commit -m "Add featurecorreia.py and updated main.py"
Para além disso tambem foi atualizado o README.md (Este comando vai ser utilizado frequentemente ao longo deste relatorio)
git add README.md
git commit -m "Updated README.md"
O ficheiro featurecorreia.py sofreu uma alteração
git add featurecorreia.py
git commit -m "Updated feature"
Voltou-se ao branch main, e utilizou-se o cherry-pick para escolher um commit especifico para ser aplicado no main. Neste caso escolheu-se o update feature:
git checkout main
git cherry-pick 70ced99
Devido ao ficheiro featurecorreia.py não existir no branch main, houve um conflito. Para resolver este conflito foram efectuados os seguintes comandos:
- Primeiramente verificou-se se haviam algumas alterações nos ficheiros envolvidos no cherry-pick
cat main.py
cat README.md
- Como não havia nenhuma alteração nos ficheiros fez-se o seguinte comando para resolver o conflicto:
git add .
git cherry-pick --continue
De seguida fiz o merge do branch bcorreia com o main:
git merge bcorreia
Houve conflictos ao fazer o merge.
- Para ver quais eram os conflictos fez-se os seguintes comandos
cat main.py
cat README.py
- Para resolver os conflictos então editou-se o que era suposto editar e fez-se os seguintes comandos:
git add .
git commit -m "Solved merge conflict"
- Agora esta versão será a versão 1.0 do projecto. Ficando assim mais fácil de acompanhar as versões do projecto, para isso fez-se o >
git tag v1.0 edb75e7
- Por fim falta ainda usar o rebase, para isso vamos criar um novo branch thisIsRebase, fazer mais uns commits e fazer o respectivo r>
git checkout -b thisIsRebase
git add README.md
git commit -m "Updated README.md"
git add main.py
git commit -m "Added new feature to main.py"
git rebase thisIsRebase main
Aqui está como fica depois de juntar todos os repositórios.
- As Tags e os Branchs não passam para o repositório remoto, como é que se faz?
- Se nós estamos a fazer fork dos trabalhos, não acaba por simular nós a contribuirmos para um repositório de outra pessoa?
- Se estamos só a contribuir para um repositório de outra pessoa, então não estamos a simular um cenário de uma equipa de programação, onde há um trabalho centrado no mesmo repositório e não em forks do mesmo, correto? Ou as equipas de programação fazem as contribuições para os projectos desta maneira (criam um fork, trabalham nesse fork e só depois é que fazem um pull request)?