Come Git-Ignore Symlink su un modulo Magento installato dal compositore


11

Installo i moduli usando composer.phar.

Questo crea file symlink in publichtml/app/code/community(ad esempio) con una destinazione a vendor/themodule....

Nel mio .gitignoreho escluso la directory del fornitore, ma i collegamenti sarebbero ovviamente finiti nel git.

C'è un modo semplice per escludere automaticamente quei collegamenti? (oltre ad aggiungere tutto manualmente a .gitignore)

Devo dire che ho alcuni require-devmoduli che non dovrebbero finire sul server finale, quindi avere quei collegamenti almeno non sarebbe così bello.


1
Questo si applicherebbe anche a modman?
Philwinkle,

Con modman generalmente useresti i sottomoduli git per ogni estensione e aggiungeresti semplicemente i collegamenti simbolici al repository. Non c'è bisogno di escluderli lì, al contrario, non avrebbe senso soprattutto in uno scenario di schieramento modman.
Vinai,

1
@philwinkle Di recente ho iniziato a tracciare la radice di Magento in un repository separato per motivi di sicurezza (ad esempio, rilevare facilmente i file modificati), per tenere traccia delle modifiche a index.php e Mage.php e per aggiornamenti Magento più facili, quindi sicuramente rilevanti anche per modman, IMO .
ColinM,

Risposte:


8

Il meglio che mi è venuto in mente è stato eseguire questo dopo un'installazione / aggiornamento del compositore

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

Il comando dovrebbe essere eseguito nella directory root di git. Aggiunge tutti i collegamenti simbolici al file .gitignore che non sono già presenti.


questo genera percorso come ./foo/bar.. Penso che dobbiamo rimuovere il primo .- ha funzionato per te in quel modo?
Alex,

Funziona bene per me con il protagonista ., sì. Altrimenti in soccorso:find . -type l -not -exec grep -q "{}" .gitignore \; -print | sed 's/^\.\///'
Vinai,

In realtà, questo rompe il grep ... beh, forse c'è un buon modo per ripulire il percorso comunque ...
Vinai

1
Soluzione semplice: find * .... Aggiornerò la mia risposta.
Vinai,

3

Questo metodo aggiunge solo collegamenti simbolici non tracciati, quindi può essere ripetuto senza aggiungere voci duplicate, collegamenti simbolici che si trovano in sottomoduli o che sono altrimenti già ignorati o collegamenti simbolici tracciati intenzionalmente.

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


1

La soluzione combinata di @ColinM e @Vinai che funziona per me

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

Hai notato che i recenti installer del compositore escludono automaticamente i symlink?
Alex

Certo, ma alcuni dei miei progetti non sono sotto il controllo del compositore. E le soluzioni fornite qui non sono solo per progetti di compositori ma per ignorare del tutto i collegamenti simbolici. Spero che possa aiutare qualcuno
martin_mageworx il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.