Git
Chapters ▾ 2nd Edition

10.1 Internos do Git - Plumbing and Porcelain

Podes ter saltado para este capítulo de um capítulo muito anterior, ou podes ter chegado aqui depois de ler sequencialmente o livro inteiro até este ponto — em ambos os casos, é aqui que vamos superar o funcionamento interno e a implementação do Git . Descobrimos que entender esta informação era fundamentalmente importante para apreciar o quão útil e poderoso é o Git, mas outros argumentaram que pode ser confuso e desnecessariamente complexo para iniciantes. Assim, fizemos esta discussão o último capítulo do livro para que tu possas lê-lo mais cedo ou mais tarde no teu processo de aprendizagem. Nós deixamos que tu decidas.

Agora que estás aqui, vamos começar. Primeiro, se ainda não está claro, o Git é fundamentalmente um sistema de arquivos endereçável ao conteúdo com uma interface de utilizador VCS escrita por cima dele. Aprenderás mais sobre o que isto significa daqui a pouco.

Nos primeiros dias do Git (principalmente pré 1.5), a interface do utilizador era muito mais complexa porque enfatizava este sistema de arquivos em vez de um VCS polido. Nos últimos anos, a UI foi refinada até que seja tão limpa e fácil de usar como qualquer sistema lá fora; No entanto, o estereótipo persiste no início da IU Git que foi complexo e difícil de aprender.

A camada do sistema de arquivos endereçável ao conteúdo é incrivelmente espetacular, então abordaremos isto primeiro neste capítulo; então, aprenderás sobre os mecanismos de transporte e as tarefas de manutenção do repositório que tu eventualmente terás com que lidar.

Plumbing and Porcelain

This book covers primarily how to use Git with 30 or so subcommands such as checkout, branch, remote, and so on. But because Git was initially a toolkit for a version control system rather than a full user-friendly VCS, it has a number of subcommands that do low-level work and were designed to be chained together UNIX-style or called from scripts. These commands are generally referred to as Git’s “plumbing” commands, while the more user-friendly commands are called “porcelain” commands.

As you will have noticed by now, this book’s first nine chapters deal almost exclusively with porcelain commands. But in this chapter, you’ll be dealing mostly with the lower-level plumbing commands, because they give you access to the inner workings of Git, and help demonstrate how and why Git does what it does. Many of these commands aren’t meant to be used manually on the command line, but rather to be used as building blocks for new tools and custom scripts.

When you run git init in a new or existing directory, Git creates the .git directory, which is where almost everything that Git stores and manipulates is located. If you want to back up or clone your repository, copying this single directory elsewhere gives you nearly everything you need. This entire chapter basically deals with what you can see in this directory. Here’s what a newly-initialized .git directory typically looks like:

$ ls -F1
config
description
HEAD
hooks/
info/
objects/
refs/

Depending on your version of Git, you may see some additional content there, but this is a fresh git init repository — it’s what you see by default. The description file is used only by the GitWeb program, so don’t worry about it. The config file contains your project-specific configuration options, and the info directory keeps a global exclude file for ignored patterns that you don’t want to track in a .gitignore file. The hooks directory contains your client- or server-side hook scripts, which are discussed in detail in Git Hooks.

This leaves four important entries: the HEAD and (yet to be created) index files, and the objects and refs directories. These are the core parts of Git. The objects directory stores all the content for your database, the refs directory stores pointers into commit objects in that data (branches, tags, remotes and more), the HEAD file points to the branch you currently have checked out, and the index file is where Git stores your staging area information. You’ll now look at each of these sections in detail to see how Git operates.