O que 'stage' significa no git?

274

Acho difícil de entender porque não consegui encontrar o significado das palavras usadas para as ações. Verifiquei o dicionário para 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?

    
por 000 15.11.2011 / 04:27
fonte

8 respostas

269

Para estágio , um arquivo é simplesmente para prepará-lo para um commit. O Git, com seu índice, permite que você confirme apenas algumas partes das alterações que você fez desde o último commit. Digamos que você esteja trabalhando em dois recursos - um está concluído e ainda é necessário algum trabalho. Você gostaria de fazer um commit e ir para casa (às 5 horas, finalmente!), Mas não gostaria de comprometer 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 feito, enquanto o segundo ainda está em andamento em seu diretório de trabalho.

    
por 15.11.2011 / 04:36
fonte
121

Já que todos até agora responderam de maneira "formal", deixe-me fazer isso com alternativas para melhorar o aprendizado com o poder das metáforas.

Então a área de teste é como:

  • um cache de arquivos que você deseja confirmar
  • não uma série de tubos, mas na verdade um caminhão de descarga, pronto para mover o trabalho com o qual você carrega, para o repositório
  • um lugar mágico onde os arquivos selecionados serão transformados em pedra com sua magia e podem ser transportados magicamente para o repositório ao seu gosto
  • a estrada de tijolos amarelos para os arquivos irem felizes para o repositório (ou cair se você quiser reverter)
  • o lugar fictício no porto marítimo, onde os arquivos são recebidos um par de sapatos de cimento e, em seguida, jogados no mar do repositório
  • o balcão de recepções na biblioteca, você coloca os arquivos lá para o bibliotecário se preparar para entrar na biblioteca
  • uma caixa onde você coloca as coisas antes de colocá-las embaixo da sua cama, onde sua cama é um repositório de caixas que você já colocou em
  • o compartimento de carregamento dos arquivos antes de entrar no warehouse 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é, então os arquivos comprometidos são o café fresco
  • o escritório de Patinhas McDuck ao lado do cofre, os arquivos são como as moedas antes de entrarem no cofre de sua enorme Caixa de Dinheiro
  • a pet shop, uma vez que você traga um pet para casa, você está comprometido

É mágico !

    
por 15.11.2011 / 08:56
fonte
30

O armazenamento temporário é um passo antes do processo de confirmação no git. Ou seja, um commit no git é realizado em duas etapas: staging e commit atual.

Contanto que um changeset esteja na área de preparação, o git permite que você o edite da maneira que preferir (substitua os arquivos testados por outras versões de arquivos preparados, remova as alterações da preparação, etc.).

Tempo da metáfora quebrada:

Considere um cenário onde você chama os motores para obter suas coisas do seu antigo apartamento para o seu novo apartamento. Antes de fazer isso, você passará por suas coisas, decidirá o que levará com você e o que jogará fora, coloque-o em sacos e deixe-o no corredor principal. Os motores simplesmente vêm, pegam as sacolas (já embaladas) do corredor e as transportam. Neste exemplo, tudo até que os impulsionadores obtenham suas coisas, é encenado: você decide o que vai aonde, como empacotá-lo e assim por diante (por exemplo, você pode decidir que metade de suas coisas serão jogadas fora antes mesmo de chegarem lá - isso é parte de estadiamento).

De um ponto de vista técnico, o teste também suporta confirmações transacionais, dividindo todas as operações em algo que pode falhar (temporariedade) e o que não pode falhar (commit):

O commit no git é implementado transacionalmente, após o staging ser bem sucedido. Várias etapas no teste podem falhar (por exemplo, você precisa confirmar, mas seu HDD está 99.9999% cheio e o git não tem espaço para realizar um commit). Isso falhará no teste (seu repositório não será corrompido por um commit parcial) e o processo de teste não afetará seu histórico de commit (ele não corromperá seu repositório em caso de erro).

    
por 07.07.2014 / 14:45
fonte
25

Organizar um arquivo é prepará-lo para um commit. Como o git expõe essa ação ao controle de usuários, permite criar commits parciais ou modificar um arquivo, organizá-lo, modificá-lo novamente e apenas confirmar ou reverter para a modificação original.

O teste permite um controle mais preciso sobre como você deseja abordar o controle de versão.

    
por 15.11.2011 / 04:31
fonte
17

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

I checked the dictionary for the meaning of stage and none of the meanings was related to source control concepts.

Em inglês, "stage" pode significar

organize and participate in (a public event): UDF supporters staged a demonstration in Sofia

(de link )

O nome "staging" para o recurso git deriva desse 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: -).

    
por 15.11.2011 / 10:15
fonte
4

Com a maioria dos outros sistemas de controle de versão, há dois locais para armazenar dados: sua cópia de trabalho (as pastas / arquivos que você está usando atualmente) e o armazenamento de dados (onde o controle de versão decide como embalar 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ê pode determinar quais alterações são enviadas para fora.

fonte: link

    
por 11.07.2014 / 02:55
fonte
-1

O "estágio" é uma etapa intermediária tecnicamente necessária no processo de verificação de um arquivo, ou seja, coleta das alterações a serem adicionadas ao repositório. Os autores do Git escolheram tornar este passo visível e persistente, onde outros VCS fazem dele uma parte transitória do processo de commit. Então é só uma opção que o git te dá porque pode então porque não?

Do jeito que eu vejo, a principal coisa que o git "stage" dá a você que o outro VCS não é que você pode usá-lo para checar um arquivo. É efetivamente uma confirmação local sem nome, descomentada, que lhe dá um passo intermediário entre o término de todo o seu trabalho e o seu comprometimento com o repositório permanentemente, sem ter nada salvo em seu repositório local.

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

Mais tarde, você terá a opção de apenas confirmar o que foi preparado (e enviar o commit para o repositório remoto) ou adicionar suas novas alterações à sua área de armazenamento temporário e, em seguida, confirmar tudo de uma só vez ou desfazer apenas o seu novas alterações e reverta seu diretório de trabalho para o estado em que estava quando você organizou suas alterações.

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

    
por 29.04.2014 / 22:34
fonte
-2

Meu entendimento é, suponha que eu esteja desenvolvendo o recurso de login e precise de 5 etapas consecutivas para concluir. Então, o staging ajudará você a trabalhar em etapas como o feito com a etapa 1 etapa.
feito com o passo 2, agora o passo 1 e o passo 2 estão ambos correctos. bagunçar com o passo 3 sem problema checkout última etapa encenada que é o passo 2
da mesma forma, uma vez que você fez com todas as 5 etapas que significa que o recurso está completo, execute commit.

    
por 25.08.2016 / 13:57
fonte

Tags