O que significa 'estágio' no git?

316

Acho difícil entender o git, pois não consegui encontrar o significado das palavras usadas para as ações. Eu verifiquei no dicionário o significado de 'estágio' e nenhum dos significados estava relacionado aos conceitos de controle de origem.

O que significa 'estágio' no contexto do git?

000
fonte
11
O Git realmente tem seu próprio vocabulário. E como todas as instruções são formuladas no vocabulário especial, é difícil começar. "Preparar" é fazer git add file.extpara um arquivo específico ou git add .afetar todos os arquivos modificados e não rastreados. Os arquivos que foram adicionados dessa maneira são considerados "organizados" e serão incluídos no próximo "commit". O commit é um instantâneo do seu trabalho criado, por exemplo, with git commit -m "I wrote something".
Jonatan Öström
11
Git é difícil de entender porque não existe um tutorial conceitual por aí. Todos passam por detalhes desnecessários.
Xaqron
2
Você quis remover a tag "terminologia" desta pergunta? Parece uma tag perfeitamente válida para mim.
Philip Kendall
Por alguma razão, a melhor maneira de entender a importância da preparação é a partir desta resposta no Quora: qr.ae/TbSK2I
Lamar

Respostas:

310

Para encenar um arquivo é simplesmente para prepará-lo finamente para um commit. O Git, com seu índice, permite que você confirme apenas certas partes das alterações que você fez desde o último commit. Digamos que você esteja trabalhando em dois recursos - um está concluído e o outro ainda precisa de algum trabalho. Você gostaria de fazer um commit e voltar para casa (5 horas, finalmente!), Mas não gostaria de confirmar as partes do segundo recurso, o que ainda não foi feito. Você prepara as partes que você conhece pertencem ao primeiro recurso e confirma. Agora seu commit é seu projeto com o primeiro recurso concluído, enquanto o segundo ainda está em andamento no diretório de trabalho.

Torre
fonte
5
Boa explicação. Observe que o git, sendo distribuído, obviamente permite que você confirme os dois recursos, pois os commit são locais (no início). Ainda assim, convém dividir as modificações em uma confirmação por recurso e, novamente, a preparação é útil.
sleske
77
Não entendo por que você precisa preparar para isso. Eu posso fazer isso com o HG ou mesmo com o SVN enviando apenas os arquivos relevantes. Parece que esse recurso foi projetado principalmente para ajudar as pessoas que insistem em trabalhar com a linha de comando, onde é mais difícil marcar as caixas sobre o que você está comprometendo.
jiggy
78
O @jiggy git permite preparar parte de um arquivo. Você também pode preparar um arquivo, fazer outras modificações e confirmar o estado em que estava na preparação. Você não pode fazer isso no subversion.
Izkata
4
@jiggy No SVN, há algo entre o tempo em que você seleciona quais arquivos / partes de arquivos confirmar e quando termina de escrever sua mensagem de confirmação, que registra quais arquivos / partes você selecionou para confirmar. Ele nunca pode ser mencionado explicitamente, pode ser implementado no cliente SVN, em vez de ser uma parte real do repositório; pode haver apenas alguns sinalizadores na memória, mas esse é o estágio do SVN. Eu não olhei para HG, mas suspeito que faz a mesma coisa. A diferença com o git é que o git reconhece que é uma coisa, grava no disco e permite que o usuário o acesse diretamente.
8bittree
7
A segunda seta "arquivos de estágio" na figura pode ser enganosa. "palcos de palco" pode ser mais preciso?
Ida
137

Como todos até agora responderam da maneira "formal", deixe-me fazer isso com alternativas para aprimorar o aprendizado com o poder das metáforas.

Portanto, a área de preparação é como:

  • um cache de arquivos que você deseja confirmar
  • não uma série de tubos, mas na verdade um caminhão basculante, pronto para mover o trabalho com o qual você o carrega, para o repositório
  • um lugar mágico onde os arquivos selecionados serão transformados em pedra com a sua magia e podem ser transportados magicamente para o repositório à sua vontade
  • a estrada de tijolos amarelos para que os arquivos cheguem alegremente ao repositório (ou caiam se você desejar reverter)
  • o lugar fictício no porto marítimo onde os arquivos são recebidos com um par de sapatos de cimento e depois jogados no mar do repositório
  • no balcão de recepções da biblioteca, você coloca os arquivos lá para o bibliotecário se preparar para arquivar na biblioteca
  • uma caixa onde você coloca as coisas antes de empurrá-las para debaixo da cama, onde sua cama é um repositório de caixas nas quais você empurrou anteriormente
  • o compartimento de carregamento de arquivos antes de entrar no armazém de repositório com o carregador de energia
  • o filtro de uma cafeteira elétrica por gotejamento, se os arquivos forem como o pó de café, os arquivos comprometidos serão o café moído
  • No escritório do Scrooge McDuck, ao lado do cofre, os arquivos são como as moedas antes de entrarem no cofre de sua enorme caixa de dinheiro
  • a loja de animais, quando você leva um animal de estimação para casa, você está comprometido

É mágico !

Spoike
fonte
Ame as analogias; caminho a percorrer ^ _ ^
Musa Al-hassy
Ame a analogia final.
meTchaikovsky
35

A preparação é uma etapa antes do processo de confirmação no git. Ou seja, uma consolidação no git é realizada em duas etapas: preparo e consolidação real.

Enquanto um conjunto de alterações estiver na área de armazenamento temporário, o git permite que você o edite como desejar (substitua os arquivos temporários por outras versões dos arquivos temporários, remova as alterações do armazenamento temporário, etc.).

Tempo quebrado da metáfora:

Considere um cenário em que você liga para os agentes de mudança para obter suas coisas do seu apartamento antigo para o seu novo apartamento. Antes de fazer isso, você examinará suas coisas, decidirá o que você leva com você e o que você joga fora, empacota-as em sacos e deixa-as no corredor principal. Os transportadores simplesmente vêm, pegam as malas (já embaladas) do corredor e as transportam. Neste exemplo, tudo até que os movedores obtenham suas coisas é organizado: você decide o que vai para onde, como empacotá-lo e assim por diante (por exemplo, você pode decidir que metade das suas coisas será jogada fora antes mesmo que os movedores cheguem lá - isso é parte de preparação).

Do ponto de vista técnico, a preparação também suporta confirmações transacionais, dividindo todas as operações naquilo que pode falhar (preparação) e o que não pode falhar (confirmação):

O commit no git é implementado transacionalmente, após o teste ser bem-sucedido. Várias etapas na preparação podem falhar (por exemplo, você precisa confirmar, mas o seu HDD está 99,9999% cheio e o git não tem espaço para executar uma confirmação). Isso falhará no armazenamento temporário (seu repositório não será corrompido por uma confirmação parcial) e o processo de armazenamento temporário não afeta o histórico de confirmação (não corrompe seu repositório em caso de erro).

utnapistim
fonte
... e tão poucos votos até agora.
ojonugwa ochalifu
26

Preparar um arquivo é prepará-lo para uma confirmação. Como o git expõe essa ação ao controle dos usuários, ele permite criar confirmações parciais ou modificar um arquivo, prepará-lo, modificá-lo novamente e modificá-lo novamente e apenas confirmar ou reverter para a modificação original.

A preparação permite um controle mais preciso sobre exatamente como você deseja abordar o controle de versão.

Josh K
fonte
19

Para adicionar às outras excelentes respostas, é aqui que o nome de "estágio" vem:

Verifiquei o dicionário quanto ao significado de estágio e nenhum dos significados estava relacionado aos conceitos de controle de origem.

Em inglês, "encenar" pode significar

organizar e participar de (um evento público): os apoiadores da UDF realizaram uma manifestação em Sofia

(em http://oxforddictionaries.com/definition/stage )

O nome "teste" para o recurso git deriva deste significado: Ao preparar, você está preparando e organizando um commit. É claro que um commit não é exatamente o mesmo que um desempenho, mas é um evento importante em um VCS :-).

sleske
fonte
3
Eu teria pensado que combinava mais de perto o uso em ponto de paragem
Useless
Idem. Além disso, "um ponto, período ou etapa de um processo ou desenvolvimento".
Darien
Também 'servidor de teste' é um termo bastante comum usado para descrever um servidor que está entre desenvolvimento e produção.
Eternal21
4

Na maioria dos outros sistemas de controle de versão, existem 2 locais para armazenar dados: sua cópia de trabalho (as pastas / arquivos que você está usando no momento) e o armazenamento de dados (onde o controle de versão decide como compactar e armazenar suas alterações). No Git, há uma terceira opção: a área de teste (ou índice). É basicamente uma doca de carregamento onde você determina quais alterações são enviadas.

fonte: http://gitready.com/beginner/2009/01/18/the-staging-area.html

Mostafiz Rahman
fonte
1
este não parece acrescentar nada substancial sobre anteriores 6 respostas
mosquito
Menciona Index. E referências a um artigo muito completo. Voto a favor. BTW, algumas respostas acima são apenas piadas.
Gangnus
1

O "estágio" é uma etapa intermediária tecnicamente necessária no processo de check-in de um arquivo, ou seja, coletando as alterações a serem adicionadas ao repositório. Os autores do Git optaram por tornar essa etapa visível e persistente, enquanto outros VCS a tornam uma parte transitória do processo de confirmação. Portanto, é apenas uma opção que o git oferece, porque pode, por que não?

Do meu ponto de vista, a principal coisa que o "estágio" do git dá a você que outros VCS não oferecem é que você pode usá-lo para verificar um arquivo. É efetivamente um commit local não nomeado e não comentado que fornece uma etapa intermediária entre concluir todo o seu trabalho e enviá-lo permanentemente ao repositório e não ter nada salvo no repositório local.

Por exemplo, digamos que você tenha um recurso parcialmente finalizado. Está em um estado estável, passa em todos os testes e pode entrar em produção, mas você tem mais trabalho a fazer. Você pode preparar todas as suas alterações e continuar trabalhando no recurso.

Posteriormente, você terá a opção de confirmar apenas o que você preparou (e enviar por push para o repositório remoto) ou adicionar novas alterações à sua área de preparação e, em seguida, confirmar isso de uma só vez ou desfazer apenas as novas alterações e alterações. reverta seu diretório de trabalho para o estado em que estava quando você efetuou as alterações.

É completamente possível praticamente pular a área de preparação completamente e apenas usar a -aopção para git commitse você não achar a área de preparação um conceito útil. Muitas pessoas ignoram o teste e as ferramentas da GUI geralmente também permitem isso.

Old Pro
fonte
"outros VCS não" - o que faz você pensar assim? Prateleiras no Perforce parece estar fazendo o que você descreve, e mesmo com alguns sinos e assobios adicionais
mosquito
1
@gnat sim, é claro que muitos outros VCS oferecem algo como preparação. Por "outros VCS", quero dizer outros VCS que não têm algo como o palco do git, pois é a isso que o OP estava se referindo.
Old Pro
Achei essa resposta imensamente melhor do que todas as anteriores, pois é a única que esclarece por que o Staging existe (sendo tecnicamente necessário ), uma explicação de sua origem ( os autores do Git escolheram tornar essa etapa visível e persistente ), adicionando pessoalmente, acho que é uma boa definição para ele ( um commit local intermediário, sem nome e não comentado ). No entanto, acho que poderia ser melhorado citando uma fonte para a declaração sobre a origem do Staging e elaborando um pouco mais sobre por que é tecnicamente necessário . @OldPro
alexlomba87
-1

Pelo que entendi, suponha que eu esteja desenvolvendo o recurso de login e precisei de 5 etapas consecutivas para concluir. Portanto, a preparação aqui ajudará você a trabalhar em etapas como as
feitas na etapa 1.
feito na etapa 2, agora as etapas 1 e 2 estão corretas.
estrague a etapa 3 sem problemas, finalize a última etapa faseada que é a etapa 2 da
mesma maneira, uma vez que você executou todas as 5 etapas, o que significa que o recurso está completo agora execute a confirmação.

palash140
fonte
este não parece acrescentar nada substancial sobre os pontos feitos e explicado em antes 9 respostas
mosquito
Sim, você está certo, eu apenas tentei fazer explicação simples e doce
palash140
E o que eu sinto gosto de usar esse conceito praticamente i tentou explicar que
palash140
considere dar uma olhada na discussão aqui: As segundas respostas TL; DR são aceitáveis? (FWIW comparação com respostas anteriores este não parece simples nem doce para mim)
mosquito
obrigado senhor, tenho uma pergunta a fazer. Encontrei muitas respostas e a maioria delas é complexa demais, sim, essas são corretas, mas difíceis de digerir de uma só vez; acredito que se você não pode explicar nada de uma maneira simples, então não a aprendeu direito ou não sabe como para usá-lo. Então, agora é ruim colocar um resumo ou uma maneira simples de responder?
precisa saber é o seguinte