Então, aqui está a situação. Eu tenho um repositório git com vários submódulos. O diretório de nível superior e todos os submódulos contêm soluções do Visual Studio 2010.
O repositório de nível superior depende dasubmódulos atualizados e precisam ser reconstruídos sempre que forem atualizados. O que eu quero fazer, como existe um número arbitrário de submódulos, é criar algum tipo de gancho pós-atualização no git para compilar o submódulo que acabou de ser atualizado.
Então, minha pergunta é a seguinte: quais ganchos (se houver) são chamados quando um submódulo é atualizado? Parece que o pós-pagamento pode ser o que eu quero, mas não tenho certeza.
Estamos usando o TortoiseGit com o Git for Windows (msysgit) como back-end, se isso fizer alguma diferença.
Respostas:
1 para resposta № 1Isso deve funcionar, como um post-update hook
no pai repo:
Você precisaria monitorar o .gitmodules
arquivo para quaisquer alterações, a fim de detectar quaisquer alterações nesse arquivo (indicando que outro clone do seu repo pai mudou um submódulo e comprometeu a nova referência no repo pai).
Então você pode:
- detectar quais submódulos foram alterados
- decida se você deseja atualizar seus submódulos (
git submodule update --recursive
) - recompilar os submódulos relevantes
Mas isso supõe que um clone do repositório pai tenha sido modificado para fazer referência a novos commits dos seus submódulos.
Se os submódulos forem atualizados independentemente de qualquer repositório pai, o mesmo post-update
O gancho (ainda no repo pai), em um checkout / atualização do repo pai, precisa:
- vá em cada submódulo e faça uma busca
- verifique se a busca introduz novos commit
- decida se você deseja atualizar seus submódulos, desta vez retirando as alterações dos submódulos
- volte no repositório pai e confirme, para registrar o novo SHA1 dos submódulos de alterações
- recompila os que precisavam de
git pull
(ou seja, isso mudou)
Você pode configurar o gancho pós-atualização em cada um dossubmódulos, mas a abordagem acima é melhor quando você adiciona ou remove submódulos do repositório pai, pois centraliza o processo de detecção em um único local (o post-update
gancho do repositório principal).