Quando falamos em Fork, logo lembramos de um garfo, um utensílio de cozinha que contém uma haste que no final se separa em três hastes, certo?
De maneira geral, um Fork representa uma cópia de um determinado repositório para outro, permitindo que os usuários experimentem alterações em um determinado projeto.
Mas daí você se pergunta: “Porque alguém faria uma cópia de um determinado projeto no GitHub?”.
São diversos os motivos:
+ Usar o projeto de outra pessoa, como ponto de partida para sua própria ideia.
+ Quando você deseja propor alterações no repositório principal ao mesmo tempo que você não tem acesso ao mesmo.
Mas daí você pode pensar: “Se eu quiser usar um determinado repositório como ponto de partida para minha própria ideia, basta criar meu próprio repositório, e usar somente os arquivos que eu preciso daqueles repositórios que não são meus, não é verdade?”.
Sim, isso é uma ideia totalmente plausível de acontecer, pois pra que fazer uma cópia de um repositório existente, dizendo a todos que meu projeto é uma “cópia”, se eu não posso simplesmente criar meu próprio repositório que contenha alguns arquivos de outros? Não é verdade?
Ou quem sabe pensar: “Se eu quiser propor alterações em um repositório existente, basta eu conversar com algum dos contribuidores e tentar pedir acesso ao repositório. E mesmo se mesmo assim não me derem acesso, posso simplesmente criar uma nova Issue…”.
Sim, isso também é verdade!
Podemos dizer também que podemos criar um fork quando não temos permissões de push para o repositório do GitHub de alguém.
Bem, se tudo isso aí é uma grande verdade, podemos resumir (em outras palavras) que fazemos um Fork quando:
1) Encontramos um repositório interessante, mas com pontos que ‘achamos’ que podem ser melhorados, ao mesmo tempo que não temos acesso ao push, e que a nossa mão está coçando para realizar essas melhorias de tal modo que já queremos fazer push para ontem. Em casos como esses executamos um Fork.
2) Encontramos um repositório interessante, com pontos que ‘achamos’ que podem ser melhorados, ao mesmo tempo que não te deixam fazer parte do projeto, ou não consideram suas alterações relevantes. Em casos como esses executamos um Fork.
3) Encontramos um repositório interessante, mas tão antigo, que parece que o criador o abandonou de vez, e como queremos ressuscitá-lo, podemos fazer um Fork.
Se tratando do item 3, podemos dizer então que um FORK, nada mais é do que uma prática do estilo “Reinventar a Roda”? Sim, podemos dizer que sim.
Existem aqueles que criam um Fork de seus antigos projetos porque perderam o acesso a sua antiga conta do GitHub, ao mesmo tempo que existem aqueles que também criam um Fork dos seus próprios projetos para representar e dizer aos outros que a ideia tomou novos rumos (famosa “pivotagem” do mundo do empreendedorismo).
É importante ressaltar que toda vez que fazemos uma cópia de um determinado repositório (Fork), tanto o repositório original quanto a cópia são assíncronos, ou seja, as atualizações acontecem de forma independente (e não automática).
Nesse caso, se o repositório original sofrer alguma atualização (receber novos commits), tal operação não vai refletir no repositório de cópia.