É git remote update
o equivalente de git fetch
?
fonte
UPDATE: mais informações!
Eu deveria ter feito isso desde o início: eu cumprimentei as notas de lançamento do Git no repositório Git do Git (então meta!)
grep --color=always -R -C30 fetch Documentation/RelNotes/* | less
Depois fiz uma less
pesquisa --all
e foi o que encontrei nas notas de lançamento do Git versão 1.6.6 :
git fetch
aprendidas--all
e--multiple
opções, para executar a busca em muitos repositórios e--prune
opção para remover ramificações de rastreamento remoto que ficaram obsoletas. Estes tornamgit remote update
egit remote prune
menos necessários (não há nenhum plano para removerremote update
nemremote prune
, no entanto).
A versão 1.6.6 não foi lançada até 23 de dezembro de 2009 , e o Pôster original fez sua pergunta em 6 de dezembro de 2009.
Portanto, como você pode ver nas notas de versão, os autores do Git estavam cientes do fato de que a git remote update
funcionalidade do comando estava sendo duplicada git fetch
, mas eles decidiram não removê-la, talvez por compatibilidade com scripts e programas existentes, ou talvez porque é muito trabalho e há itens de prioridade mais alta.
Resposta original com mais detalhes
A resposta do xenoterracide já tem 3,5 anos e o Git passou por várias versões desde então (passou da v1.6.5.5 para a v1.8.3.2 até o momento em que este artigo foi escrito), e olhando a documentação atual para git remote update
e git fetch
, parece como se ambos pudessem executar basicamente a mesma função de buscar novas confirmações de vários controles remotos , dadas as opções e argumentos corretos.
Uma maneira de buscar vários controles remotos é com o --all
sinalizador:
git fetch --all
Isso será buscado em todos os controles remotos configurados, supondo que você não tenha remote.<name>.skipFetchAll
definido para eles:
Se verdadeiro, este controle remoto será ignorado por padrão ao atualizar usando git-fetch (1) ou o subcomando update de git-remote (1) . - documentação do git-config
Isso seria equivalente a usar
git remote update
sem especificar nenhum grupo remoto a ser buscado, e também sem ter remotes.default
definido na configuração de repo, e também que nenhum de seus controles remotos foi remote.<name>.skipDefaultUpdate
definido como true.
A documentação 1.8.3.2 atual para a configuração do Git não menciona a remotes.default
configuração, mas consultei o Todo Poderoso Google sobre isso e encontrei esta explicação útil de Mislav Marohnić :
$ git config remotes.default 'origin mislav staging'
$ git remote update
# fetches remotes "origin", "mislav", and "staging"
Você pode definir uma lista padrão de controles remotos a serem buscados pelo
remote update
comando. Estes podem ser controles remotos de seus colegas de equipe, membros confiáveis da comunidade de um projeto de código-fonte aberto ou similares.
Portanto, presumivelmente, se você remotes.default
configurou e nem todos os seus controles remotos estão listados nele, git remote update
não buscará todos os controles remotos dos quais seu repo está "ciente".
Quanto à remote.<name>.skipDefaultUpdate
configuração, os documentos do Git explicam assim:
Se verdadeiro, este controle remoto será ignorado por padrão ao atualizar usando git-fetch (1) ou o subcomando update de git-remote (1) .
Em vez de buscar todos os controles remotos, ambos fetch
e remote update
permitir que você especifique vários controles remotos e grupos de controles remotos a serem buscados:
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)…]
git fetch [<options>] <group>
permite buscar vários controles remotos que fazem parte de um grupo (para emprestar outro exemplo do Mislav ):
$ git config remotes.mygroup 'remote1 remote2 ...'
$ git fetch mygroup
git fetch --multiple
permite especificar vários repositórios e grupos de repositórios para buscar de uma só vez ( nos documentos ):
Permitir que vários
<repository>
e<group>
argumentos sejam especificados. Não<refspec>s
pode ser especificado.
Ambiguidade na git remote update
documentação
A sinopse paragit remote update
especifica que a sintaxe do comando é a seguinte:
git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]
Observe a última parte [(<group> | <remote>)…]
? Os pontos finais ...
indicam que você pode especificar vários grupos e controles remotos com o comando, o que significa que ele se comporta da mesma maneira que git fetch --multiple
... veja como a sintaxe entre os dois é tão semelhante?
No entanto, no mesmo documento, a explicação para o update
comando não diz nada sobre a especificação de vários argumentos remotos e de grupo, apenas que
Busque [es] atualizações para um conjunto nomeado de controles remotos no repositório, conforme definido por
remotes.<group>
.
Portanto, não está claro se git remote update
funciona de forma idêntica no que git fetch --multiple
diz respeito à especificação de vários controles remotos individuais e vários grupos remotos.
Finalmente, todo mundo conhece o caso simples de buscar um único controle remoto:
git fetch <remote>
Pode ser que você também possa usar
git remote update <remote>
para fazer a mesma coisa, mas como mencionei na seção anterior, a documentação para git remote update
não está clara sobre se é possível buscar algo diferente de um único grupo de controles remotos com o comando
Como expliquei, git fetch
e git remote update
se comporta de maneira semelhante em relação à busca de vários controles remotos. Eles compartilham sintaxe e argumentos semelhantes, embora git fetch
sejam mais curtos, portanto as pessoas provavelmente acham mais fácil digitar e usar.
Pode ser o caso que git remote update
não pode ser usado para buscar apenas um único controle remoto git fetch
, mas, como apontei, a documentação não deixa isso claro.
a parte, de lado
A duplicação na funcionalidade entre os comandos de porcelana Git, exemplificada por git fetch
e git remote update
acima, não é exclusiva. Eu notei uma situação semelhante com git rebase --onto
e git cherry-pick
, em que ambos podem levar uma série de confirmações para corrigir uma nova confirmação básica.
Eu acho que, à medida que o Git evoluiu ao longo dos anos, algumas funcionalidades foram (inevitavelmente?) Duplicadas, talvez às vezes como uma conveniência para os usuários finais (por exemplo, é mais fácil passar um intervalo para cherry-pick
, do que passar um único commit repetidamente) para escolher um intervalo). Aparentemente cherry-pick
, nem sempre aceitamos uma série de confirmações, conforme explicado nas notas de versão v1.7.2 :
git cherry-pick
aprendeu a escolher uma variedade de confirmações (por exemplo,cherry-pick A..B
echerry-pick --stdin
), o mesmo fezgit revert
; eles não oferecem suporte ao controle de seqüenciamento mais agradávelrebase [-i]
.
git rebase
é comomv
egit cherry-pick
é comocp
. O--onto
interruptor não muda isso. Você pode obter um efeito de cópiagit rebase
apenas se especificar valores SHA1, caso contrário, sua ramificação será movida!Sim e não.
git remote update
busca de todos os controles remotos, não apenas um.Sem olhar o código para ver se
remote update
é apenas um script de shell (possível), basicamente, é executado a busca para cada controle remoto.git fetch
pode ser muito mais granular.fonte
git remote update
, consulte a página de manual do git-remote.git remote
não é um script de shell, mas geragit fetch
durante aremote update
.git fetch
opção de comando equivalente para agit remote update
?git fetch --all