Eu tenho um projeto que usa arquivos do Jupyter Notebook para análise de dados e mantenho a saída e alguns metadados fora do git com um filtro limpo/manchado. Às vezes, farei ajustes no filtro e quero que essas alterações sejam aplicadas automaticamente, em vez de ter que pedir aos meus colaboradores para executarem um git config
comando a cada vez.
Como posso configurar o filtro para executar scripts rastreados pelo repositório?
Para o propósito desta questão, vamos supor que o comando clean seja aquele de Como limpar a saída e os metadados do Jupyter Notebook ao usar o git commit? :
jupyter nbconvert --ClearOutputPreprocessor.enabled=True --ClearMetadataPreprocessor.enabled=True --to=notebook --stdin --stdout --log-level=ERROR
Isso normalmente é configurado como ...
git config filter.<filter-name>.clean "<command>"
...e usado com um .gitattributes
que inclui o seguinte.
*.ipynb filter=<filter-name>
Perguntas relacionadas
- .gitattributes borrar e limpar filtros como parte do repositório está próximo, mas relacionado à configuração de filtros
git clone
em vez de rastrear alterações no filtro com o repositório - Como posso rastrear arquivos de configuração específicos do sistema em um repositório/projeto? é uma questão mais geral sobre o rastreamento de qualquer arquivo de configuração em um repositório, sem abordar as especificidades desta questão.
- Quais são os riscos de segurança ao permitir a configuração de filtros de manchas e limpeza com git clone é sobre a configuração de um filtro em
git clone
, não sobre a configuração de um filtro após a clonagem que usa um script no repositório.
Para configurar um filtro borrado ou limpo no Git que faça referência a um script rastreado pelo repositório, você precisa usar um caminho relativo para o script no repositório a partir do diretório raiz do projeto (na verdade, relativo ao seu ,
.gitattributes
onde o filtro é declarado)Para o seu cenário específico com arquivos do Jupyter Notebook, você pode configurar o filtro limpo colocando o script limpo em seu repositório, por exemplo,
scripts/clean_jupyter.sh
. Esse script (que deve ser executável:)chmod +x scripts/clean_jupyter.sh
incluirá o comando que você mencionou:Configure seu
.gitattributes
arquivo para usar este script para seus arquivos do Jupyter Notebook:Configure o filtro limpo
.git/config
para fazer referência ao seu script:Para que essas alterações sejam aplicadas automaticamente a todos os colaboradores, você pode incluir instruções no arquivo do seu projeto
README.md
ou configurar um script de inicialização que eles possam executar uma vez para definir as configurações do repositório local. O Git não permite a aplicação automática de configurações de filtro de um repositório por motivos de segurança, portanto a configuração manual é necessária.Para responder sua pergunta sobre minha resposta antiga sobre " Como posso rastrear arquivos de configuração específicos do sistema em um repositório/projeto? ":
O filtro
smudge
orclean
é um script que é:git/git/t/chainlint/token-pasting.test
%PATH%
ou$PATH
da sua sessão shell; nesse caso, você pode referenciá-lo apenas pelo nome (sem caminho).Se quiser configurar filtros do Git para executar scripts rastreados pelo repositório, você poderá usar caminhos relativos para fazer referência aos scripts na configuração do filtro. Veja como você pode modificar a configuração do filtro no arquivo .git/config para conseguir isso:
Supondo que você tenha uma estrutura de diretórios como esta:
Seu arquivo .gitattributes deve referenciar os scripts com um caminho relativo da raiz do seu repositório:
Atualize a configuração do filtro no arquivo .git/config com caminhos relativos aos seus scripts:
Certifique-se de ajustar os caminhos e comandos com base na estrutura real do seu projeto e nos comandos necessários para limpar e manchar os arquivos do Jupyter Notebook.
Envie os arquivos .gitattributes e .git/config atualizados para seu repositório:
Dessa forma, quando os colaboradores clonarem o repositório, a configuração do filtro fará referência aos scripts por meio de caminhos relativos, e os scripts serão executados com base em sua localização na estrutura do projeto. Ajuste os caminhos de acordo com a configuração específica do seu projeto.