-
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 Instalando o Git
- 1.6 Configuração Inicial do Git
- 1.7 Pedindo Ajuda
- 1.8 Sumário
-
2. Fundamentos de Git
-
3. Branches no Git
-
4. Git on the Server
- 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 Third Party Hosted Options
- 4.10 Summary
-
5. Distributed Git
-
6. GitHub
- 6.1 Configurando uma conta
- 6.2 Contribuindo em um projeto
- 6.3 Maintaining a Project
- 6.4 Managing an organization
- 6.5 Scripting GitHub
- 6.6 Summary
-
7. Git Tools
- 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 Summary
-
8. Customizing Git
- 8.1 Git Configuration
- 8.2 Git Attributes
- 8.3 Git Hooks
- 8.4 An Example Git-Enforced Policy
- 8.5 Summary
-
9. Git and Other Systems
- 9.1 Git as a Client
- 9.2 Migrating to Git
- 9.3 Summary
-
10. Funcionamento Interno do Git
- 10.1 Encanamento e Porcelana
- 10.2 Objetos do Git
- 10.3 Referências do Git
- 10.4 Packfiles
- 10.5 The Refspec
- 10.6 Transfer Protocols
- 10.7 Maintenance and Data Recovery
- 10.8 Variáveis de ambiente
- 10.9 Sumário
-
A1. Appendix A: Git em Outros Ambientes
- A1.1 Graphical Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Eclipse
- A1.4 Git in Bash
- A1.5 Git in Zsh
- A1.6 Git in Powershell
- A1.7 Resumo
-
A2. Appendix B: Embedding Git in your Applications
- A2.1 Command-line 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
10.1 Funcionamento Interno do Git - Encanamento e Porcelana
Talvez você venha de um capítulo anterior para este, ou talvez você tenha chegado aqui depois de ler o resto do livro. De qualquer forma, aqui iremos para o funcionamento e implementação internos do Git. Nós achávamos que aprender esta informação era de fundamental importância para o entendimento do quão útil e poderoso o Git é, mas outras pessoas alegaram para nós que isso pode ser confuso e desnecessariamente complexo para iniciantes. Desta forma, levamos esta discussão para o último capítulo do livro, de forma que você possa lê-lo tanto no começo quanto mais tarde em seu aprendizado. Deixamos que você decida isso.
Já que você está aqui, vamos começar. Primeiramente, se ainda não está claro, o Git é essencialmente um sistema de arquivos de conteúdo endereçável com uma interface de usuário de um VCS escrita sobre ele. Você logo aprenderá o que isso significa.
Nos primeiros dias do Git (principalmente antes da versão 1.5), a interface de usuário era muito mais complexa por ela enfatizar mais esse sistema de arquivos do que ser um VCS pronto. Nos últimos anos, a interface de usuário foi refinada até se tornar tão clara e fácil quanto qualquer outro VCS; porém, com frequência ainda perdura o esteriótipo da interface antiga do Git que era complexa e difícil de aprender.
O sistema de arquivos de conteúdo endereçável é incrivelmente interessante, então cobriremos isto primeiramente neste capítulo; em seguida, você irá aprender sobre os mecanismos de transporte e as tarefas de manutenção que você eventualmente terá de lidar.
Encanamento e Porcelana
Este livro cobre como usar o Git com mais ou menos 30 verbos como checkout
, branch
, remote
, entre outros.
Porém, como o Git a princípio era um conjunto de ferramentas para um VCS em vez de um VCS completo e amigável, ele tem uma porção de verbos que fazem trabalhos de baixo nível e foram feitos para serem encadeados no estilo UNIX ou serem chamados em scripts.
Esses comandos normalmente são chamados como comandos de “encanamento” (plumbing), e os mais amigáveis são chamados de comandos “porcelana” (porcelain).
Os primeiros nove capítulos deste livro lidam quase exclusivamente com comandos porcelana. Entretanto, neste capítulo, você irá lidar na maior parte do tempo com os comandos de encanamento, de nível mais baixo, pois eles lhe darão acesso ao funcionamento interno do Git e ajudarão a demonstrar como e porque o Git faz o que ele faz. Muitos desses comandos não foram feitos para serem usados manualmente na linha de comando, mas para serem usados como blocos de construção de novas ferramentas e scripts próprios.
Quando você executa git init
em um diretório novo ou existente, o Git cria um diretório .git
, que é onde é localizado quase tudo que o Git armazena ou manipula.
Se você quer fazer uma cópia ou clonar o seu repositório, copiar apenas este diretório para outro lugar te dá quase tudo que você precisa.
Este capítulo inteiro basicamente lida com o conteúdo deste diretório.
A aparência dele é essa:
$ ls -F1
HEAD
config*
description
hooks/
info/
objects/
refs/
Talvez você veja outros arquivos nesse diretório, porém esse é um repositório logo após um git init
- isso é o que você vê por padrão.
O arquivo description
só é usado pelo programa GitWeb, então não se preocupe com ele.
O arquivo config
contem opções de configuração específicas do seu projeto, e o diretório info
mantém um arquivo exclude
global para padrões ignorados que você não gostaria de colocar em um arquivo .gitignore
.
O diretório hooks
contém scripts hooks tanto para o lado do cliente quanto do servidor, que são discutidos em detalhes em Git Hooks.
Isto nos deixa quatro importantes entradas: o arquivo HEAD
e o (ainda a ser criado) arquivo index
, além dos diretórios objects
e refs
.
Essas são as partes principais do Git.
O diretório objects
guarda todo o conteúdo para o seu banco de dados, o diretório refs
guarda referências para objetos commit nesse banco de dados (branches), o arquivo HEAD
aponta para a branch em que você fez um checkout, e o arquivo index
é onde o Git guarda a informação da área de stage.
Você irá agora ver cada uma das trẽs seções em detalhes para entender como o Git funciona.