Como Git-Ignore Symlinks em um módulo Magento instalado pelo compositor

11

Eu instalo módulos usando composer.phar.

Isso cria arquivos de links simbólicos publichtml/app/code/community(por exemplo) com um destino para vendor/themodule....

No meu .gitignore, excluí o diretório do fornecedor - mas os links ainda acabariam no git.

Existe uma maneira fácil de excluir automaticamente esses links? (além de adicionar tudo manualmente ao .gitignore)

Devo dizer que tenho alguns require-devmódulos que não devem terminar no servidor final - portanto, ter esses links não seria tão bom.

Alex
fonte
1
Isso também se aplica ao modman?
philwinkle
Com o modman, você geralmente usava sub-módulos git para cada extensão e simplesmente adicionava os links simbólicos ao repositório. Não há necessidade de excluí-los por lá, pelo contrário, não faria sentido em um cenário de implantação modman principalmente.
Vinai
1
@philwinkle Recentemente, comecei a rastrear a raiz do Magento em um repositório separado por motivos de segurança (por exemplo, detectar facilmente arquivos modificados), para rastrear alterações em index.php e Mage.php e para atualizações mais fáceis do Magento, definitivamente relevantes para o modman, IMO .
ColinM

Respostas:

8

O melhor que eu criei foi executar isso após a instalação / atualização de um compositor

$ find * -type l -not -exec grep -q "^{}$" .gitignore \; -print >> .gitignore

O comando deve ser executado no diretório raiz do git. Ele adiciona todos os links simbólicos ao arquivo .gitignore que ainda não estão lá.

Vinai
fonte
isso gera um caminho do tipo ./foo/bar.. Acho que temos que remover o primeiro .- funcionou assim para você?
13133 Alex
Funciona bem para mim com o líder ., sim. Outro sed para o resgate:find . -type l -not -exec grep -q "{}" .gitignore \; -print | sed 's/^\.\///'
Vinai 13/06
Na verdade, isso quebra o grep ... bem, talvez haja uma boa maneira de limpar o caminho para cima de qualquer maneira ...
Vinai
1
Solução simples: find * .... Atualizará minha resposta.
Vinai
3

Esse método adiciona apenas links simbólicos não rastreados, para que possa ser repetido sem adicionar entradas duplicadas, links simbólicos que estão em submódulos ou que já foram ignorados ou links simbólicos rastreados intencionalmente.

for f in $(git status --porcelain | grep '^??' | sed 's/^?? //'); do
    test -L "$f" && echo $f >> .gitignore;
    test -d "$f" && echo $f\* >> .gitignore;
done
ColinM
fonte
1

A solução combinada de @ColinM e @Vinai que funciona para mim

for f in $(git status --porcelain | grep '^??' | sed 's/^?? //'); do
    if test -L "$f"
    then
        test -L "$f" && echo $f >> .gitignore;
    elif test -d "$f"
    then
        find ${f%/} -type l -not -exec grep -q "^{}$" .gitignore \; -print >> .gitignore
    fi
done
martin_mageworx
fonte
Você notou que os instaladores recentes do compositor excluem automaticamente os links simbólicos?
1128 Alex Alex
Claro, mas alguns dos meus projetos não estão sob controle do compositor. E as soluções fornecidas aqui não são apenas para projetos de compositores, mas para ignorar completamente os links simbólicos. Espero que isso vai ajudar alguém
martin_mageworx