O que é Git
Tags: git, beginners
Published: 2022-01-29 04:22:39

Ok... Então avançamos para essa parte importante, e a pergunta é o que é git ? Esta seção é bastante importante por que até certo ponto você já entendeu a historia do git e como foi aplicado outros softwares anteriores ao git. De fato estamos se aprofundando aos conceitos e entendendo como usa-lo efetivamente, será muito mais fácil para você. Não se atente ao primeiro momento sobre outros VCSs, CVS, SubVersion ou Peforce - com isso evitamos confundir ao usar a ferramenta. Embora sejam semelhantes a essas ferramentas, o Git pensa e performa de uma maneira muito diferente, e entender essas diferenças ajuda a evitar essas confusões.


## Instantâneos, não diferenças 

O git tem uma característica que o destaca de outros CVS(Subversion e amigos) é a maneira de como pensado os seus dados. No geral os sistemas armazenam seus dados como uma lista de alterações com base em arquivo. Os outros sistemas (CVS, Subversion, Perforce, Bazaar e outros) consideram as informações como arquivos em conjunto e as alterações feitas em cada arquivo ao longo do tempo.



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e4r3kdibm0cmp7x66609.png)

Figura acima: Armazena dados como alterações em uma versão base de cada arquivo.

O Git não pensa ou armazena os seus dados dessa maneira. O Git pensa em seus dados como uma serie de instantâneos de um sistema de arquivos em miniatura, para ficar mais claro o exemplo dado, voce pode pensar que toda a vez que você confirma ou salva o estado do seu projeto, o Git tira basicamente uma foto de como estão todos os seus arquivos naquele momento e armazena uma referencia a esse instantâneo. Garantindo mais eficiência, e caso esse arquivo não for alterado, o Git não armazena novamente, o git pensa como um fluxo de instantâneos.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ps5eqpaelzflckh0ewy9.png)

figura acima ilustra forma de armazenar dados como instantâneos do projeto ao longo do tempo.

A diferença entre Git e quase todos os outros VCSs, é que quase todos os aspectos do Git foram reconsiderados em relação aos outros VCSs que somente copiaram de gerações anteriores. O Git vai muito além do que somente um VCS.


## Maioria das operações são locais

A maioria do fluxo de trabalho no git precisa apenas de arquivos e recursos locais para operar - normalmente não necessita de outra informação de outro computador em sua rede. E caso ainda tenha lembranças dos CVCS em que a maioria das vezes tenha operações com sobrecarga sobre latência de rede, com toda essa velocidade faz você tenha todo o histórico do git em seu disco local, as operações são quase instantânea.

Para navegar no seu histórico por exemplo, você não precisa ir ao servidor e fazer toda a procura para exibi-lo, ele simplesmente lê o banco de dados local e o exibe. Tendo acesso ao histórico do projeto quase que instantâneo. E se tiver alguma alteração mais antiga no banco de dados local o git pode fazer o calculo para você e ter sua diferença local, em vez que ter que pedir autorização para um servidor ou vá até o servidor remoto antigo do arquivo remoto.

Também significa que há muito pouco que NAO possa se fazer off-line ou sem VPN. você pode trabalhar de qualquer lugar e modificar o seu arquivo, até chegar em uma conexão de rede para fazer o upload. E caso você não consiga se conectar a rede, significa que consegue trabalhar normalmente no projeto até poder subir suas alterações. Em outros sistemas, fazer isso é impossível. No peforce, por exemplo, você não pode fazer muito quando não conectado no servidor, No subversion e no CVS, você pode editar arquivo, mas não pode enviar alterações para seu banco de dados(porque ele esta off-line). 

## Git tem integridade

Tudo no Git passa por uma soma de verificação antes de ser armazenado e é então referenciado por essa soma de verificação. Isso significa que é imp0ossivel alterar o código antes que o git não saiba. Funcionalidade essa que foi adicionada ao Git nos níveis mais baixos e é parte principal de sua filosofia. Você não perde informações ou obtém arquivo corrompidos sem que o Git tenha detectado

Mecanismo esse usado é chamado de hash SHA-1. abaixo tenho um exemplo de uma string de 40 caracteres composta por caracteres hexadecimais(0-9- e a-f) e calculada com de um diretorio git, um hash SHA-1, Se parece com isto: 



        ``24b9da6552252987aa493b52f8696cd6d3b00373``


Você vai encontrar números parecidos em todos os seus projetos, o Git armazena tudo em seu banco de dados não pelo nome do arquivo, e sim pelo valor do seu hash.


## Git Geralmente apenas adiciona dados

Quando você faz algo no Git, quase senão todas elas são adicionadas ao banco de dados Git. E dificilmente o sistema possa fazer algo que possa ser desfeito ou apague os dados de alguma forma. você pode perder alterações que ainda não fez, mas depois de fazer o commit de um SNAPSHOT no Git, é muito difícil perder, com maior dificuldade se você envia regularmente para seu banco de dados.

E com isso torna o git mais seguro, sabendo que podemos alterar o arquivo tendo total consciência que podemos retornar ao estado anterior e recuperar todas as alterações.


## Os Três Estados

Três Estados principais que precisam ser lembrados no Git. modificado, preparado e confirmado.

- Modificado: significa que você alterou alterou o arquivo, mas ainda não confirmou em seu banco de dados

- Staged: significa que você marcou um arquivo modificado em sua versão atual para entrar no snapshot do commit.

- Comprometido: significa que os dados local estão guardados em seu banco de dados com segurança 



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kqjk8c5ei85xkzopd5h6.png)


Figura: Área de trabalho, área de teste e diretório Git

Arvore de trabalho é o único checkout da versão do projeto. Os arquivos são retirados do banco de dados compactado no diretório Git colocados no disco para você usar ou modificar.

A área de teste é um arquivo, em geral esta em seu .git, e vai armazenar informações sobre seu próximo commit, o nome técnico dele é "índice".

O diretório Git é onde armazena os metadados e o banco de dados de objetos do seu objetos do seu projeto. parte mais importante do Git, e é o que é copiado quando você clona um repositório de outro computador.

fluxo de trabalho básico do git:

1. Você modifica arquivos em sua arvore de trabalho

2. Você prepara seletivamente apenas as alterações que deseja que façam parte do seu próximo commit

3. Você faz um commit, que pega os arquivos como eles estão na área de teste e armazena nesse snapshot permanentemente em seu diretório Git