O que é o controlo de versões?
Um sistema de controle de versão (VCS) é um programa ou conjunto de programas que rastreia alterações em uma coleção de arquivos. Um objetivo de um VCS é recuperar facilmente versões anteriores de arquivos individuais ou de todo o projeto. Outro objetivo é permitir que vários membros da equipe trabalhem em um projeto, mesmo nos mesmos arquivos, ao mesmo tempo, sem afetar o trabalho uns dos outros.
Outro nome para um VCS é um sistema de gerenciamento de configuração de software (SCM). Os dois termos geralmente são usados indistintamente – na verdade, a documentação oficial do Git está localizada em git-scm.com. Tecnicamente, o controle de versão é apenas uma das práticas envolvidas no SCM. Um VCS pode ser usado para projetos que não sejam software, incluindo livros e tutoriais on-line.
Com um VCS, você pode:
- Ver todas as alterações feitas ao seu projeto, quando foram feitas e quem as fez.
- Inclua uma mensagem com cada alteração para explicar o raciocínio por trás dela.
- Recupere versões anteriores de todo o projeto ou de arquivos individuais.
- Criar ramos, onde as alterações podem ser feitas experimentalmente. Este recurso permite que vários conjuntos diferentes de alterações (por exemplo, recursos ou correções de bugs) sejam trabalhados ao mesmo tempo, possivelmente por pessoas diferentes, sem afetar o ramo principal. Mais tarde, você pode mesclar as alterações que deseja manter de volta na ramificação principal.
- Anexe uma tag a uma versão, por exemplo, para marcar uma nova versão.
O Git é um VCS rápido, versátil, altamente escalável, gratuito e de código aberto. O seu autor principal é Linus Torvalds, o criador do Linux.
Controlo de versões distribuído
Instâncias anteriores de VCSes, incluindo CVS, Subversion (SVN) e Perforce, usavam um servidor centralizado para armazenar o histórico de um projeto. Essa centralização significava que um servidor também era potencialmente um único ponto de falha.
O Git é distribuído, o que significa que o histórico completo de um projeto é armazenado no cliente e no servidor. Pode editar ficheiros sem uma ligação de rede, verificá-los localmente e sincronizar com o servidor quando estiver disponível uma ligação. Se um servidor ficar inativo, ainda terá uma cópia local do projeto. Tecnicamente, nem precisa de ter um servidor. As alterações podem ser passadas por e-mail ou compartilhadas usando mídia removível, mas ninguém usa o Git dessa forma na prática.
Terminologia do Git
Para compreender o Git, tem de entender a terminologia. Aqui está uma pequena lista de termos que os usuários do Git usam com frequência. Não se preocupe com os detalhes por enquanto; Todos estes termos tornar-se-ão familiares à medida que for avançando nos exercícios deste módulo.
Árvore de trabalho: o conjunto de diretórios aninhados e arquivos que contêm o projeto que está sendo trabalhado.
Repositório (repo): O diretório, localizado no nível superior de uma árvore de trabalho, onde o Git mantém todo o histórico e metadados de um projeto. Os repositórios são quase sempre chamados de repos. Um repositório nu é aquele que não faz parte de uma árvore de trabalho, é usado para compartilhamento ou backup. Um repositório nu geralmente é um diretório com um nome que termina em .git — por exemplo, project.git.
Hash: um número produzido por uma função de hash que representa o conteúdo de um arquivo ou outro objeto como um número fixo de dígitos. O Git utiliza hashes de 160 bits. Uma vantagem de utilizar hashes é o Git conseguir saber se um ficheiro alterou o conteúdo por hash e comparar o resultado com o hash anterior. Se o carimbo de data e hora do arquivo for alterado, mas o hash do arquivo não for alterado, o Git saberá que o conteúdo do arquivo não será alterado.
Objeto: um repositório Git contém quatro tipos de objetos, cada um identificado exclusivamente por um hash SHA-1. Um objeto de blob contém um ficheiro comum. Um objeto de árvore representa um diretório que contém nomes, hashes e permissões. Um objeto de consolidação representa uma versão específica da árvore de trabalho. Uma etiqueta é um nome anexado a uma consolidação.
Commit: Quando usado como um verbo, commit significa fazer um objeto commit. Esta ação tem origem nas consolidações feitas a uma base de dados. Isso significa que você está cometendo as alterações que fez para que outras pessoas também possam eventualmente vê-las.
Ramificação: uma ramificação é uma série nomeada de commits vinculados. A consolidação mais recente num ramo é denominada cabeçalho. A ramificação padrão, que é criada quando você inicializa um repositório, é chamada
main
de , geralmente nomeadamaster
no Git. O chefe do ramo atual é nomeadoHEAD
. As ramificações são um recurso incrivelmente útil do Git porque permitem que os desenvolvedores trabalhem de forma independente (ou em conjunto) nas ramificações e, posteriormente, mesclem suas alterações na ramificação padrão.Remoto: um remoto é uma referência nomeada a outro repositório Git. Quando você cria um repositório, o Git cria um controle remoto chamado
origin
que é o controle remoto padrão para operações push e pull.Comandos, subcomandos e opções: as operações Git são executadas usando comandos como
git push
egit pull
.git
é o comando epush
oupull
é o subcomando. O subcomando especifica a operação que pretende que o Git execute. Os comandos frequentemente são acompanhados por opções, que usam hífenes (-) ou hífenes duplo (--). Por exemplo,git reset --hard
.
Estes termos e outros, como push
e pull
, farão mais sentido em breve. Mas você tem que começar em algum lugar, e você pode achar útil voltar e rever este glossário de termos depois de terminar o módulo.
Linha de comandos do Git
Várias GUIs diferentes estão disponíveis para o Git, incluindo o GitHub Desktop. Muitos editores de programação, como o Microsoft Visual Studio Code, também têm uma interface para o Git. Todos eles trabalham de forma diferente e têm limitações diferentes. Nenhum destes implementa todas as funcionalidades do Git.
Os exercícios neste módulo usam a linha de comando do Git — especificamente, comandos do Git executados no Azure Cloud Shell. No entanto, a interface de linha de comando do Git funciona da mesma forma, independentemente do sistema operacional que você estiver usando. Além disso, a linha de comandos permite-lhe tirar partido de todas as funcionalidades do Git. Os desenvolvedores que veem o Git apenas através de uma GUI às vezes se veem confrontados com mensagens de erro que não conseguem resolver, e eles têm que recorrer à linha de comando para começar novamente.
Git e GitHub
Ao trabalhar com o Git, você pode se perguntar sobre as diferenças entre os recursos que ele oferece e os recursos oferecidos no GitHub.
Como mencionado anteriormente, o Git é um sistema de controle de versão distribuído (DVCS) que vários desenvolvedores e outros colaboradores podem usar para trabalhar em um projeto. Ele fornece uma maneira de trabalhar com uma ou mais filiais locais e, em seguida, enviá-las por push para um repositório remoto.
O GitHub é uma plataforma na cloud que utiliza o Git como tecnologia principal. O GitHub simplifica o processo de colaboração em projetos e fornece um site, mais ferramentas de linha de comando e fluxo geral que desenvolvedores e usuários podem usar para trabalhar juntos. O GitHub atua como o repositório remoto mencionado anteriormente.
As principais funcionalidades fornecidas pelo GitHub incluem:
- Problemas
- Debates
- Pedidos Pull
- Notificações
- Etiquetas
- Ações
- Forks
- Projetos
Para saber mais sobre o GitHub, consulte o módulo Introdução ao GitHub Microsoft Learn ou a documentação de ajuda Introdução ao GitHub .
O passo seguinte é experimentar o Git por si próprio!