Pergunta

É possível excluir arquivos específicos ( *.ai, *.psd) ao pressionar para certos repositórios com o Git?

Minha necessidade vem de tentar usar o Git para controle de versão e implantação para Heroku. Se eu incluir meus ativos gráficos na implantação, o tamanho da lesma será maior do que o desejado. No entanto, preciso incluir todos os arquivos de projeto em meu principal Github repositório.

Foi útil?

Solução

A maneira mais fácil de resolver seu problema real é criar um .slugignore Arquivo na raiz do repositório que lista arquivos que não devem ser embalados na lesma.

Outras dicas

Você pode manter uma segunda filial para implantação no Heroku, que não contém nenhum desses arquivos, mas ainda se funde do mestre. (Obviamente, você terá que descobrir um sistema para resolver os conflitos de mesclagem que obtém ao modificar os arquivos .ai e .psd no mestre).

A coisa específica que você pede é impossível, pela simples razão de que, quando você empurra, transfere os compromissos exatos de um repositório para outro, e dois compromissos que não têm a mesma árvore são, por definição, diferentes commits.

Dica: as versões mais recentes do Git têm um --porcelain opção para git status O que fornecerá informações fáceis de analisar como "m file1" "du file2" (modificado e semirado/excluído por nós, respectivamente). Você pode escrever um invólucro Git-Merge para sua filial de implantação que tenta a mesclagem e limpa automaticamente os conflitos esperados:

git checkout deploy
if ! git merge master; then
    git rm $(git status --porcelain | awk '/^DU/ {print $NF}')
fi

(A razão pela qual imprimi $NF ao invés de $2 é que, se o arquivo é renomeado, parecerá "du original_name -> new_name", e a cópia colocada na árvore de trabalho será new_name, não original_name.)

Obviamente, o script pode ficar mais complexo se a sua situação for - você pode procurar apenas certas extensões (adicione -as ao padrão limitante da AWK) ou até capturar toda a saída em um script Perl para que você possa fazer facilmente uma lógica mais sofisticada ...

Não há uma maneira fácil de fazer isso. Certamente é gerenciável, mas com muita dor (o GIT não foi projetado para fazer isso).

Provavelmente seria mais fácil se você pedir à Heroku fornecer uma maneira de excluir alguns arquivos da implantação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top