Existe uma maneira de ter automaticamente git submodule update
(ou de preferência git submodule update --init
chamado sempre que git pull
for feito?
Procurando uma configuração de configuração do git ou um alias do git para ajudar com isso.
git
git-submodules
philfreo
fonte
fonte
Respostas:
No Git 2.14 , você pode usar
git pull --recurse-submodules
(e aliasar para o que quiser).No Git 2.15 , você pode definir
submodule.recurse
como true para ativar o comportamento desejado.Você pode fazer isso globalmente executando:
fonte
git pull
que também busque um submódulo e executesubmodule update
. Este realmente precisa ser a resposta aceita agoragit config --global submodule.recurse true
git clone
também. E ativá-lo por padrão. Caso contrário, sempre haverá uma enorme resistência ao uso de submódulos, pois os módulos das pessoas sempre ficam fora de sincronia :-(commit
,fetch
,pull
, etc.) são concebidos para ser aplicado apenas para o repositório corrente. um submódulo é outro repositório e não deve ser afetado por comandos executados no repositório pai por padrão. esse é um tipo de decisão de design do desenvolvedor do git.git config --global alias.pullall '!git pull && git submodule update --init --recursive'
Se você deseja que os argumentos sejam passados para o git pull, use-o:
fonte
A partir do Git 1.7.5, ele deve atualizar os submódulos automaticamente por padrão, como você deseja.
[EDIT: por comentários: o novo 1.7.5 comportamento é automaticamente buscar as últimas commits para submódulos, mas não para atualizar -los (no
git submodule update
sentido). Portanto, as informações nesta resposta são relevantes como pano de fundo, mas não são uma resposta completa por si só. Você ainda precisa de um alias para extrair e atualizar submódulos em um comando.]O comportamento padrão, "sob demanda", é atualizar submódulos sempre que você buscar uma confirmação que atualize a submissão do submódulo, e essa confirmação ainda não está localizada no seu clone local.
Você também pode atualizá-lo a cada busca ou nunca (comportamento anterior à 1.7.5, presumo).
A opção de configuração para alterar esse comportamento é
fetch.recurseSubmodules
.Vejo:
git config
página de manual (1.7.5) (ougit config
página de manual mais recente )git fetch
página man (1.7.5) (ou página man mais recente do git fetch )Para maiores informações.
fonte
git fetch
, não agit submodule update
.git pull
, em vez degit fetch
, esta opção apenas torna a busca recursiva. Ele não mudará qual commit é verificado nos submódulos. Portanto,git submodule update
ainda é necessário, conforme observado pelo @Artem.Estou surpreso que ninguém tenha mencionado o uso de ganchos git para fazer isso!
Basta adicionar arquivos nomeados
post-checkout
epost-merge
ao seu.git/hooks
diretório de repositórios relevantes e colocar o seguinte em cada um deles:Como você solicitou um alias especificamente, assumindo que deseja ter isso para muitos repositórios, é possível criar um alias que os adicione aos repositórios
.git/hooks
para você.fonte
core.hooksPath
para um diretório hooks , consulte a documentação paragit-config
obter mais detalhes.git pull --rebase
:(Um alias, como sugerido por Kevin Ballard, é uma solução perfeitamente boa. Apenas para lançar outra opção, você também pode usar um gancho de pós-mesclagem que simplesmente roda
git submodule update [--init]
.fonte
Você pode criar um alias para o comando git que lida automaticamente com a atualização do sub-módulo. Adicione o seguinte ao seu .bashrc
fonte
Como outros já mencionaram, você pode facilmente definir isso com:
No entanto, se você gosta de mim e tem uma
.gitconfig
configuração mais complexa (meu~/.gitconfig
arquivo principal usainclude
para carregar em outros.gitconfig
arquivos), e você nunca se lembra de como converter entre ogit
formato de configuração da linha de comando e o.gitconfig
formato, veja como adicioná-lo para qualquer um dos seus.gitconfig
arquivos:fonte
A única maneira de conseguir atualizar os submódulos e submódulos aninhados:
Eu estava lutando para criar o alias através do terminal devido aos colchetes, então tive que adicioná-lo manualmente ao .gitconfig para global:
Alguma sugestão de como executar os comandos ou o alias automaticamente?
fonte