tag - O que o git rev-parse faz?




atlassian create (4)

Apenas para elaborar a etimologia do nome do comando rev-parse , o Git usa consistentemente o termo rev em comandos de encanamento como abreviação de "revision" e geralmente significando o hash SHA1 de 40 caracteres para um commit. O comando rev-list por exemplo, imprime uma lista de 40-char commit hashes para uma ramificação ou qualquer outra coisa.

Nesse caso, o nome pode ser expandido para parse-a-commitish-to-a-full-SHA1-hash . Enquanto o comando tem as várias funções auxiliares mencionadas na resposta do Tuxdude, seu homônimo parece ser o caso de uso de transformar uma referência amigável como um nome de ramificação ou hash abreviado no hash SHA1 de 40 caracteres não ambíguo mais útil para muitos programação / encanamento finalidades.

Eu sei que estava pensando que era algo "reverso-analítico" por um bom tempo antes que eu percebesse e tivesse o mesmo problema de entender os termos "massagear" e "manipular" :)

Enfim, acho essa noção de "revisão para revisão" uma maneira satisfatória de pensar nela e um conceito confiável para levar esse comando à mente quando precisar desse tipo de coisa. Freqüentemente, no script Git, você usa uma referência de confirmação amigável ao usuário como entrada do usuário e, geralmente, quer resolvê-lo para uma referência de trabalho validada e não ambígua assim que recebê-lo o quanto antes. Caso contrário, a tradução e validação de entrada tendem a proliferar através do script.

O que o git rev-parse faz?

Eu li a man page, mas levantou mais perguntas do que respostas. Coisas como:

Escolha e massageie parâmetros

Massagem ? O que isso significa?

Eu estou usando como um resolvedor (para SHA1) de especificadores de revisão, como

git rev-parse HEAD^

ou

git rev-parse origin/master

Este é o propósito do comando? Se não, é mesmo correto usá-lo para conseguir isso?


git rev-parse Também funciona para obter o nome da ramificação atual usando o --abbrev-ref como:

git rev-parse --abbrev-ref HEAD

git rev-parse é um comando de plumbing auxiliar usado principalmente para manipulação.

Um uso comum do git rev-parse é imprimir os hashes SHA1 dado um especificador de revisão. Além disso, possui várias opções para formatar essa saída, como --short para imprimir um SHA1 exclusivo mais curto.

Existem outros casos de uso (em scripts e outras ferramentas construídas no topo do git) que eu usei para:

  • --verify para verificar se o objeto especificado é um objeto git válido.
  • --git-dir para exibir o caminho abs / relativo do diretório .git .
  • Verificando se você está atualmente dentro de um repositório usando --is-inside-git-dir ou dentro de uma árvore de trabalho usando --is-inside-work-tree
  • Verificando se o --is-bare-repository está nu usando --is-bare-repository
  • A impressão de hashes SHA1 de ramificações ( --branches ), tags ( --tags ) e os refs também podem ser filtrados com base no remote (usando --remote )
  • --parse-opt para normalizar argumentos em um script (semelhante ao getopt ) e imprimir uma string de saída que pode ser usada com eval

Massage apenas implica que é possível converter as informações de um formulário em outro, ou seja, um comando de transformação. Estes são alguns exemplos rápidos que eu posso pensar:

  • um nome de ramificação ou tag no SHA1 do commit está apontando para que possa ser passado para um comando de encanamento que aceita apenas valores SHA1 para o commit.
  • um intervalo de revisão A..B para git log ou git diff nos argumentos equivalentes para o comando de encanamento subjacente como B ^A

Como Hedgehog, acho que as respostas são terríveis. Mas embora a resposta de Hedgehog possa ser melhor, não acho que seja tão elegante quanto poderia ser. A maneira que eu encontrei para fazer isso é usando "buscar" e "mesclar" com uma estratégia definida. O que deve fazer com que suas alterações locais sejam preservadas, desde que não sejam um dos arquivos com os quais você está tentando forçar uma sobrescrita.

Primeiro faça um commit de suas alterações

 git add *
 git commit -a -m "local file server commit message"

Em seguida, busque as alterações e sobrescreva se houver um conflito

 git fetch origin master
 git merge -s recursive -X theirs origin/master

"-X" é um nome de opção e "deles" é o valor para essa opção. Você está escolhendo usar "suas" alterações, em vez de "suas" alterações, se houver um conflito.





git