Não, você não precisa adicionar seu submódulo ao seu .gitignore
: o que o pai verá do seu submódulo é um gitlink (uma entrada especialmode 160000
).
Isso significa: qualquer mudança feita diretamente em um submódulo precisa ser seguida por um commit no diretório pai.
Dessa forma, o diretório pai gravará o commit correto para o estado do submódulo: Esse commit é o "gitlink" mencionado acima;
Você pode ler mais sobre essa política em " git submodule update (true nature of submodules) ".
A ideia principal por trás dos submódulos é uma abordagem baseada em componentes , onde você faz referência a outros repos em commits específicos. Mas se você alterar alguma coisa nesses submódulos, também precisará atualizar essas referências no repositório pai.
Observe que com Git 2.13 (2º trimestre de 2017), embora não ignore o gitlink, você ainda pode ignorar o submódulo com:
git config submodule.<name>.active false
Veja mais em " Ignorar novos commits para o submódulo git ".
Nota: com Git 2.15.x / 2.16 (Q1 2018), ignorar um submódulo é mais preciso.
" git status --ignored --untracked
" não parou em uma árvore de trabalho de um projeto separado que está embutido em um diretório ignorado e arquivos listados nesse outro projeto, em vez de apenas mostrar o próprio diretório como ignorado.
Consulte commit fadb482 (25 de outubro de 2017) por Johannes Schindelin ( dscho
) .
(Incorporado por Junio C Hamano - gitster
- no commit da7996a , 06 de novembro de 2017)
status
: não se confunda com submódulos em diretórios excluídos
Passamos meticulosamente o exclude
sinalizador para a treat_directory()
função para que possamos indicar que os arquivos nele são excluídos em vez de não rastreados quando recorrem.
Mas ainda não tratamos os submódulos da mesma maneira.
Por causa disso, git status --ignored --untracked
com um submódulo
submodule
em um gitignored tracked/
mostraria o submódulo na seção " Untracked files
", por exemplo
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
tracked/submodule/
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
tracked/submodule/initial.t
Em vez disso, gostaríamos de mostrar o submódulo na seção " Ignored files
":
On branch master
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
tracked/submodule/
.gitmodules
arquivo. É verdade que esse arquivo (o.gitmodules
) pode incluir credenciais, mas se usado apenas para clonar repositórios públicos, não é necessário incluí-los. Além disso, eles podem ser armazenados em cache de qualquer maneira, mesmo no Windows, com ajudantes de credencial como o "Git Credential Manager for Windows" ( github.com/Microsoft/Git-Credential-Manager-for-Windows/… ). Portanto, ter credenciais no.gitmodules
não é uma fatalidade.Por algum motivo, submodule.module-name.active não funcionou para mim.
É por isso que usei submodule.module-name.ignore
https://git-scm.com/docs/gitmodules - aqui você pode encontrar a descrição dos valores possíveis para o parâmetro
Funciona para mim para (novos commits) e (conteúdo modificado) mensagens.
fonte
Para complementar a resposta aceita, descobri que adicionar a pasta do submódulo Git a .gitignore causa problemas - principalmente ao tentar criar um novo clone do projeto. Especificamente, a execução dos comandos normais de clone do submódulo resultou na pasta do submódulo vazia:
Apenas tentando executar novamente
estava claro qual era o problema, com base na saída:
Em vez de adicionar
-f
, removi a pasta do submódulo Git de .gitignore e executei novamente os comandos clone do submódulo - que agora criaram a pasta com sucesso. Acho que pode haver um bug em que um dos comandos de clone do submódulo respeita .gitignore, mas não avisa que está pulando um submódulo de acordo.fonte