Acho git difícil de entender, 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 “estágio” significa no contexto do git?
Comentários
Resposta
Para preparar um arquivo é simplesmente prepará-lo com perfeição para um commit. O Git, com seu índice, permite que você comprometa apenas certas partes das mudanças que você fez desde o último commit. Digamos que você esteja trabalhando em dois recursos – um foi concluído e o outro ainda precisa de algum trabalho feito. Você gostaria de fazer um commit e ir para casa (5 horas, finalmente!), Mas não gostaria de comprometer as partes do segundo recurso, o que ainda não está pronto. Você prepara as partes que sabe que pertencem ao primeiro recurso e commit. Agora seu commit é o seu projeto com o primeiro recurso concluído, enquanto o segundo ainda está em andamento no seu diretório de trabalho.
Comentários
- Boa explicação. Observe que o git, sendo distribuído, obviamente permite que você comprometa ambos os recursos, já que os commits são locais (no início). Ainda assim, você pode querer dividir as modificações em um commit por recurso, e novamente o teste vem a calhar.
- Eu não ‘ não entendo por que você precisa de teste para isso. Posso fazer isso com HG ou até mesmo SVN apenas enviando 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 t o caixas de seleção sobre o que você está enviando.
- @jiggy git permite que você teste parte de um arquivo. Você também pode preparar um arquivo, fazer modificações adicionais e confirmar o estado em que estava na preparação. Você não pode ‘ fazer isso no Subversion.
- @jiggy No SVN, há algo, entre o momento em que você seleciona quais arquivos / partes de arquivos deseja enviar e quando você termina de escrever sua mensagem de commit, isso registra quais arquivos / partes você selecionou para submeter. Pode nunca ser mencionado explicitamente, pode ser implementado no cliente SVN em vez de uma parte real do repositório, pode ser apenas alguns sinalizadores na memória, mas isso é SVN ‘ s etapa. Não ‘ t 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 ao usuário acessá-lo diretamente.
- A segunda seta ” os arquivos de teste ” na figura podem ser enganosos. ” fragmentos de estágio ” podem ser mais precisos?
Resposta
Já que 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 teste é como:
- um cache de arquivos que você deseja enviar
- não uma série de tubos, mas na verdade um caminhão basculante, pronto para mover o trabalho que 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 capricho
- a estrada de tijolos amarelos para os arquivos irem alegremente ao 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
- a mesa de recepções na biblioteca, você coloca os arquivos lá para o bibliotecário preparar para arquivamento na biblioteca
- uma caixa onde você coloca as coisas antes de empurrá-lo para baixo da cama, onde sua cama é um repositório de caixas que você já colocou
- o compartimento de carga de arquivos antes de ir para o depósito do repositório com o carregador de energia
- o filtro de uma cafeteira elétrica, se os arquivos forem como o pó de café, então os arquivos confirmados são o café coado
- o escritório do Tio Patinhas próximo ao cofre, os arquivos são como as moedas antes de irem para o cofre de sua enorme Caixa de Dinheiro
- a loja de animais, uma vez que você traz um animal de estimação para casa, você está comprometido
É mágico !
Comentários
- Adoro as analogias ; caminho a seguir, amigo ^ _ ^
- Amei a analogia final.
- Essa resposta foi ” DESESPERADAMENTE ” necessária entre o espaço de tentativas comuns para explicar a metafísica do índice git = teste git. Francamente, eu ‘ também gostaria de saber o que Linus estava pensando quando decidiu que queria uma área de índice. Eu gosto, mas simplesmente quero entender melhor por que é ‘ bom tê-lo e como usá-lo de maneira mais eficaz.
Resposta
A preparação é uma etapa antes do processo de confirmação no git. Ou seja, um commit no git é realizado em duas etapas: teste e commit real.
Enquanto um changeset está na área de teste, git permite que você edite como quiser (substitua os arquivos testados por outras versões de arquivos de teste, remova as alterações do teste, etc.).
Tempo de metáfora quebrado:
Considere um cenário onde você chama os responsáveis pela mudança para levar suas coisas do seu antigo apartamento para o seu novo. Antes de fazer isso, você examinará suas coisas, decidirá o que levará e o que jogará fora, embalará em sacolas e deixará no corredor principal. Os carregadores simplesmente vêm, pegam as malas (já embaladas) no corredor e as transportam. Neste exemplo, tudo até que os carregadores peguem suas coisas é encenado: você decide o que vai para onde, como empacotar e assim por diante (por exemplo, você pode decidir que metade das suas coisas será jogada fora antes que os carregadores cheguem lá – que ” é parte do staging).
Do ponto de vista técnico, o staging também suporta commits transacionais, dividindo todas as operações em o que pode falhar (staging) e o que não pode falhar (commit):
O commit no git é implementado de forma transacional, depois que o teste for bem-sucedido. Várias etapas no teste podem falhar (por exemplo, você precisa confirmar, mas seu HDD está 99,9999% cheio e git não tem espaço para realizar um commit). Isso irá falhar no teste (seu repositório não será corrompido por um commit parcial) e o processo de teste não afeta seu histórico de commits (ele não corrompe seu repositório no caso de um erro).
Comentários
- … e tão poucos votos até agora.
Resposta
Preparar um arquivo é prepará-lo para um commit. Como o git expõe essa ação ao controle do usuário, ele permite que você crie commits parciais ou modifique um arquivo, prepare-o, modifique-o novamente e apenas confirme ou reverta para a modificação original.
Staging permite que você controle mais preciso sobre exatamente como você deseja abordar o controle de versão.
Resposta
Para adicionar às outras respostas excelentes, aqui “s de onde vem o nome para” estágio “:
Eu verifiquei o significado de estágio no dicionário e nenhum dos significados estava relacionado aos conceitos de controle de origem.
Em inglês, “to stage” pode significar
organizar e participar de (um evento público): apoiadores UDF encenou uma demonstração em Sofia
(de http://oxforddictionaries.com/definition/stage )
O nome “staging” para o recurso git deriva deste significado: Quando staging, você está preparando e organizando um commit.É claro que um commit não é exatamente o mesmo que uma performance, mas é um evento importante em um VCS :-).
Comentários
- Eu ‘ achei que fosse mais adequado ao uso em posto de teste
- Idem. Além disso, ” um ponto, período ou etapa em um processo ou desenvolvimento. ”
- Também ‘ servidor de teste ‘ é um termo bastante comum usado para descrever um servidor que ‘ s entre o desenvolvimento e produção.
Resposta
O “estágio” é uma etapa intermediária tecnicamente necessária no processo de check-in de um , ou seja, coletando as alterações a serem adicionadas ao repositório. Os autores do Git escolheram tornar esta etapa visível e persistente onde outros VCS a tornam uma parte transitória do processo de confirmação. Portanto, é apenas uma opção que o git oferece porque pode, então por que não?
A meu ver, a principal coisa que o git “estágio” dá a você que outros VCS não podem é que você pode usá-lo para verificar um arquivo. É efetivamente um commit local sem nome e sem comentário que fornece uma etapa intermediária entre sendo feito com todo o seu trabalho e submetendo-o ao repositório permanentemente e não tendo nada salvo em seu repositório local.
Por exemplo, digamos que você tenha um recurso parcialmente concluído. Ele 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 preparar todas as suas alterações e, em seguida, continuar a trabalhar no recurso.
Mais tarde, você terá a opção de apenas enviar o que você testou (e enviar esse commit para o repositório remoto) ou adicionar seu novas mudanças em sua área de teste e, em seguida, confirme tudo de uma vez ou para desfazer apenas suas novas alterações e reverter seu diretório de trabalho ao estado em que estava quando você testou suas alterações.
É completamente possível para praticamente ignorar a área de teste e apenas usar a opção -a
para git commit
se você não achar a área de teste um conceito útil. Muitas pessoas pulam o teste e as ferramentas da GUI geralmente permitem isso também.
Comentários
- ” outro VCS don ‘ t ” – o que o faz pensar assim? Praticar estantes na Perforce parece funcionar o que você descreve, e mesmo com alguns sinos e assobios adicionais
- @gnat sim, é claro muitos outros VCS oferecem algo como encenação. Por ” outro VCS “, quero dizer outro VCS que não ‘ tem algo como git ‘ s estágio, já que era a isso que o OP se referia.
- Achei essa resposta imensamente melhor do que todas as anteriores, pois ‘ s o único que esclarece por que o Staging existe (sendo tecnicamente necessário ), uma explicação de sua origem ( Git ‘ s autores escolheram tornar esta etapa visível e persistente ), adicionando o que eu pessoalmente considero uma boa definição para ela ( um commit local intermediário, sem nome e sem comentário ) . 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
- Se o git estivesse sendo projetado do zero, isso poderia ter sido apenas parte de um ” branch ” generalizado conceito, local e não visto por outros neste caso. Da mesma forma, ” stash ” poderia ter sido implementado (e compreendido!) Como uma instância específica do conceito generalizado de ” branch. ” Você poderia ter qualquer número de níveis de ” encenação ” de sua preferência.
Resposta
Com a maioria dos outros sistemas de controle de versão, há 2 lugares para dados de armazenamento: 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 empacotar 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 mudanças serão enviadas.
Fonte: http://gitready.com/beginner/2009/01/18/the-staging-area.html
Comentários
- isso não ‘ não parece adicionar nada substancial sobre as 6 respostas anteriores
- Ele menciona o Índice. E referências a um artigo muito completo. Votos positivos. BTW, algumas respostas acima são apenas piadas.
Resposta
Meu entendimento é, suponha que eu esteja desenvolvendo o recurso de login e necessite de 5 etapas consecutivas para ser concluído. Portanto, aqui o teste o ajudará a trabalhar em etapas como
feito com o passo 1, estágio-lo.
feito com o passo 2, agora os passos 1 e 2 estão corretos.
bagunce com o passo 3 problema checkout última etapa do teste que é a etapa 2
da mesma maneira, uma vez que você fez todas as 5 etapas, o que significa que o recurso está completo, agora execute o commit.
Comentários
- isso não ‘ não parece acrescentar nada substancial sobre os pontos feitos e explicados anteriormente 9 respostas
- sim, você está certo, eu apenas tentei tornar a explicação simples e doce
- E o que eu sinto de usar este conceito praticamente tentei explicar isso
- considere dar uma olhada na discussão aqui: As respostas do segundo TL; DR são aceitáveis? (FWIW em comparação com as respostas anteriores, esta não ‘ não me pareça simples nem doce)
- obrigado, senhor, tenho uma pergunta a fazer. Eu encontrei muitas respostas e a maioria delas são muito complexas, sim, estão corretas, mas são difíceis de digerir de uma vez, eu acredito que se você não puder ‘ explicar nada de maneira simples, então você não o aprendeu corretamente ou ‘ não sabe como usá-lo. Então, é ruim agora colocar um resumo ou uma forma simples de responder ??
git add file.ext
para um arquivo específico ougit add .
para afetar todos os arquivos modificados e não rastreados. Os arquivos que foram adicionados desta forma são considerados ” preparados ” e serão incluídos no próximo ” commit “. O commit é um instantâneo do seu trabalho criado, por exemplo comgit commit -m "I wrote something"
.