-
1. Começando
- 1.1 Sobre Controle de Versão
- 1.2 Uma Breve História do Git
- 1.3 O Básico do Git
- 1.4 A Linha de Comando
- 1.5 Instalar o Git
- 1.6 Configuração Inicial do Git
- 1.7 Pedindo Ajuda
- 1.8 Resumo
-
2. Noções Básicas do Git
- 2.1 Obtendo um Repositório Git
- 2.2 Recording Changes to the Repository
- 2.3 Veja o Histórico de Confirmação
- 2.4 Desfazer Coisas
- 2.5 Working with Remotes
- 2.6 Tagging
- 2.7 Alias Git
- 2.8 Resumo
-
3. Ramificação do Git
- 3.1 Branches in a Nutshell
- 3.2 Basic Branching and Merging
- 3.3 Branch Management
- 3.4 Branching Workflows
- 3.5 Remote Branches
- 3.6 Rebasing
- 3.7 Resume
-
4. Git no Servidor
- 4.1 The Protocols
- 4.2 Getting Git on a Server
- 4.3 Generating Your SSH Public Key
- 4.4 Setting Up the Server
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Opções Hospedadas de Terceiros
- 4.10 Resumo
-
5. Git Distribuído
- 5.1 Distributed Workflows
- 5.2 Contributing to a Project
- 5.3 Maintaining a Project
- 5.4 Resumo
-
6. GitHub
-
7. Ferramentas do Git
- 7.1 Revision Selection
- 7.2 Interactive Staging
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Advanced Merging
- 7.9 Rerere
- 7.10 Debugging with Git
- 7.11 Submodules
- 7.12 Bundling
- 7.13 Replace
- 7.14 Credential Storage
- 7.15 Resumo
-
8. Personalizar o Git
- 8.1 Git Configuration
- 8.2 Git Attributes
- 8.3 Git Hooks
- 8.4 An Example Git-Enforced Policy
- 8.5 Resumo
-
9. O Git e Outros Sistemas
- 9.1 O Git como Cliente
- 9.2 Migrar para o Git
- 9.3 Resumo
-
10. Internos do Git
- 10.1 Plumbing and Porcelain
- 10.2 Git Objects
- 10.3 Git References
- 10.4 Packfiles
- 10.5 The Refspec
- 10.6 Transfer Protocols
- 10.7 Maintenance and Data Recovery
- 10.8 Environment Variables
- 10.9 Resumo
-
A1. Appendix A: Git em Outros Ambientes
- A1.1 Graphical Interfaces
- A1.2 Git no Visual Studio
- A1.3 Git no Eclipse
- A1.4 Git in Bash
- A1.5 Git no Zsh
- A1.6 Git no Powershell
- A1.7 Resumo
-
A2. Appendix B: Incorporar o Git nos teus Aplicativos
- A2.1 Linha de comando Git
- A2.2 Libgit2
- A2.3 JGit
-
A3. Appendix C: Git Commands
- A3.1 Setup and Config
- A3.2 Getting and Creating Projects
- A3.3 Basic Snapshotting
- A3.4 Branching and Merging
- A3.5 Sharing and Updating Projects
- A3.6 Inspection and Comparison
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Plumbing Commands
1.3 Começando - O Básico do Git
O Básico do Git
Então, o que é o Git em poucas palavras? Esta é uma seção que é importante aprender, porque se tu perceberes o que Git é e os fundamentos de como ele funciona, em seguida, provavelmente será muito mais fácil para ti usares efetivamente o Git. Enquanto estiveres a aprender sobre o Git, tenta esquecer as coisas que possas saber sobre outros VCSs, como Subversion e Perforce; isto vai ajudar-te a evitar a confusão subtil ao usares a ferramenta. Git armazena e vê informações de forma muito diferente do que estes outros sistemas, mesmo que a interface do utilizador seja bastante semelhante, e entender estas diferenças irá ajudar-te a não ficares confuso.
Imagens, Não Diferenças
A principal diferença entre Git e qualquer outro VCS (Subversion e similares) é a maneira Git trata os seus dados. Conceitualmente, a maioria dos outros sistemas armazenam informação como uma lista de mudanças nos arquivos. Estes sistemas (CVS, Subversion, Perforce, Bazaar, e assim por diante) tratam a informação como um conjunto de arquivos e as mudanças feitas a cada arquivo ao longo do tempo (isto é comumente descrito como controle de versão delta-based).
Git não trata nem armazena os seus dados desta forma. Em vez disso, Git trata os seus dados mais como um conjunto de imagens de um sistema de arquivos em miniatura. Toda vez que comprometeres, ou guardares o estado do teu projeto no Git, ele basicamente tira uma foto de todos os teus arquivos e armazena uma referência a esta imagem. Para ser eficiente, se os arquivos não foram alterados, Git não armazena o arquivo novamente, apenas um link para o arquivo idêntico anterior já armazenado. Git trata os seus dados mais como um fluxo de imagens.
Esta é uma diferença importante entre o Git e quase todos os outros VCSs. Isto faz o Git reconsiderar quase todos os aspectos de controle de versão que a maioria dos outros sistemas copiaram da geração anterior. Isto faz com que o Git seja mais como um mini sistema de arquivos com algumas ferramentas incrivelmente poderosas, ao invés de simplesmente um VCS. Vamos explorar alguns dos benefícios que tu ganhas ao tratar os teus dados desta forma quando cobrirmos ramificações no Git Ramificação do Git.
Quase Todas as Operações são Locais
A maioria das operações no Git só precisa de arquivos e recursos locais para operar - geralmente nenhuma informação é necessária de outro computador da rede. Se estiveres acostumado com um CVCS onde a maioria das operações têm aquela demora causada pela latência da rede, este aspecto do Git vai fazer pensares que os deuses da velocidade abençoaram Git com poderes extraterrestres. Como tens toda a história do projeto ali mesmo no teu disco local, a maioria das operações parecem quase instantâneas.
Por exemplo, para pesquisar o histórico do projeto, o Git não precisa sair para o servidor para obter a história e exibi-lo para ti - ele simplesmente lê-lo diretamente da tua base de dados local. Isto significa que tu vês o histórico do projeto quase que instantaneamente. Se quiseres ver as alterações introduzidas entre a versão atual de um arquivo e o arquivo de um mês atrás, Git pode procurar o arquivo de um mês atrás e fazer um cálculo de diferença local, em vez de ter que pedir a um servidor remoto para fazê-lo ou puxar uma versão mais antiga do arquivo do servidor remoto para fazê-lo localmente.
Isto também significa que há muito pouco que tu não podes fazer se estiveres desconectado ou sem VPN. Se estiveres num avião ou num comboio e quiseres trabalhar um pouco, podes comprometer alegremente (para a tua cópia local, lembre-se?) até conseguires conexão da rede e enviar os arquivos. Se chegares a casa e não conseguires conectar ao VPN, ainda poderás trabalhar. Em muitos outros sistemas, isto é impossível ou doloroso. Em Perforce, por exemplo, não podes fazer quase nada se não estiveres conectado ao servidor; e no Subversion e CVS, podes editar os arquivos, mas não poderás comprometer alterações à tua base de dados (porque tu não estás conectado na tua base de dados). Isto pode não parecer muito, mas poderás-te surpreender com a grande diferença que isto pode fazer.
Git Tem Integridade
Tudo no Git passa por uma soma de verificação (checksum) antes de ser armazenado e é referenciado por esta soma. Isto significa que é impossível mudar o conteúdo de qualquer arquivo ou pasta sem que Git saiba. Esta funcionalidade está incorporada no Git nos níveis mais baixos e é parte integrante de sua filosofia. Não perderás informação durante a transferência e não receberás um arquivo corrompido sem que o Git seja capaz de detectár.
O mecanismo que o Git utiliza para esta soma de verificação é chamado um hash SHA-1. Esta é uma seqüência de 40 caracteres composta de caracteres hexadecimais (0-9 e a-f) e é calculada com base no conteúdo de uma estrutura de arquivo ou diretório no Git. Um hash SHA-1 é algo como o seguinte:
24b9da6552252987aa493b52f8696cd6d3b00373
Vais ver estes valores de hash em todo o lugar no Git porque ele os usa com frequência. Na verdade, o Git armazena tudo na sua base de dados não pelo nome do arquivo, mas pelo valor de hash do seu conteúdo.
O Git Geralmente Somente Adiciona Dados
Quando fazes algo no Git, quase sempre são adicionados dados à base de dados do Git - e não removidos. É difícil fazer algo no sistema que não seja reversível ou para fazê-lo apagar dados de forma alguma. Como em qualquer VCS, tu podes perder as alterações que ainda não tenham sido comprometidas; mas depois de comprometer uma imagem no Git, é muito difícil de perdê-la, especialmente se enviares regularmente a tua base de dados para outro repositório.
Isto faz com que o uso do Git seja somente alegria, porque sabemos que podemos experimentar sem o perigo de estragar algo. Para um olhar mais aprofundado de como o Git armazena os seus dados e como tu podes recuperar dados que parecem perdidos, consulta Desfazer Coisas.
Os Três Estados
Agora, presta atenção — Esta é a principal coisa a lembrar sobre Git se quiseres que o resto do teu processo de aprendizagem ocorra sem problemas. O Git tem três estados principais que os teus arquivos podem estar: comprometido, modificados e preparado:
-
Comprometido significa que os dados estão armazenados de forma segura na tua base de dados local.
-
Modificado significa que alteraste o arquivo, mas ainda não o comprometeste à tua base de dados.
-
Preparado significa que marcaste a versão atual de um arquivo modificado para fazer parte do teu próximo comprometimento.
Iso leva-nos a três seções principais de um projeto Git: o diretório Git, o diretório de trabalho e área de preparo.
O diretório Git é onde o Git armazena os metadados e a base de dados de objetos do teu projeto. Esta é a parte mais importante do Git, e é o que é copiado quando tu clonas um repositório de outro computador.
O diretório de trabalho é uma simples cópia de uma versão do projeto. Estes arquivos são puxados da base de dados compactado no diretório Git e colocados no disco para os usar ou modificar.
A área de preparo é um arquivo, geralmente contido no teu diretório Git, que armazena informações sobre o que vai entrar no teu próximo comprometimento. É por vezes referido como o “índice”, mas também é comum referir-se a ele como “área de preparo”.
O fluxo de trabalho básico Git é algo assim:
-
Tu modificas os arquivos no teu diretório de trabalho.
-
Tu preparas os arquivos, adicionando imagens deles à tua área de preparo.
-
Tu comprometes, o que leva os arquivos como eles são na área de preparo e armazenas estas imagens de forma permanente para o diretório do Git.
Se uma versão específica de um arquivo está no diretório Git, é considerado comprometido. Se for modificado, mas foi adicionado à área de preparo, é considerado preparado. E se ele for alterado depois de ter sido carregado, mas não foi preparado, ele é considerado modificado. No Noções Básicas do Git, tu vais aprender mais sobre estes estados e como podes tirar proveito deles ou saltar a parte de preparação inteiramente.