Ao interagir com o Git e com plataformas como o GitHub, BitBucket e GitLab, algumas terminologias podem ser confusas. Entre essas terminologias estão o clone e o fork de um repositório. Ambos os termos parecem fazer a mesma coisa – criar uma cópia de um repositório existente – mas quais são as principais diferenças entre eles?
Git clone vs. Git fork
Quando um repositório Git é clonado, o repositório de destino permanece partilhado entre todos os programadores que contribuíram anteriormente para ele. Esses programadores continuarão a enviar as suas alterações e a obter atualizações do repositório clonado.
Qualquer programador que clone um repositório pode sincronizar a sua cópia da code base com quaisquer atualizações feitas por outros programadores.
Em contraste com um clone, um fork do Git criará uma cópia completamente nova do repositório de destino. O programador que executa o fork terá controlo total sobre a code base recentemente copiada.
Os programadores que contribuíram para o repositório Git que foi forked não terão conhecimento do novo repositório e não terão meios para contribuir ou sincronizar-se com eles, a menos que o programador que realizou a operação dê acesso.
Como escolher entre o clone e o fork
- Um programador que se junta a uma equipa de desenvolvimento de software e planeia contribuir para a code base irá normalmente clonar o repositório. Quando são feitas alterações ou atualizações, quer pelo programador quer por outros membros da equipa, qualquer clone pode ser facilmente sincronizado com um git push ou um git pull.
- Um programador que pretenda criar um projeto novo, separado e isolado, baseado num repositório Git publicamente acessível, deve efetuar um fork. Os forks são também utilizados para contribuições em projetos open source.
Alguns exemplos famosos de forks do Git incluem:
- Jenkins, que é um fork do Hudson.
- Fire OS para Kindle Fire, que é um fork do Android
- Ubuntu, que é um fork do Debian
- MariaDB, do MySQL
Quando um repositório é forked, os programadores que planeiam trabalhar com a nova code base continuarão a precisar de executar uma operação de clone no repositório forked. Ainda será necessário executar operações push e pull para sincronizar as alterações locais com o repositório.
No entanto, as alterações e atualizações do repositório forked serão isoladas e não serão refletidas no repositório original (a não ser que seja realizado um pull request para o mesmo).
Leia também: