Jak Git-Ignore Symlinks na module Magento zainstalowanym przez kompozytora

11

Instaluję moduły za pomocą composer.phar.

To tworzy pliki dowiązań symbolicznych w publichtml/app/code/community(na przykład) z celem do vendor/themodule....

W moim .gitignorewyłączyłem katalog dostawcy - ale linki nadal oczywiście trafiłyby do git.

Czy istnieje prosty sposób na automatyczne wykluczenie tych linków? (inne niż ręczne dodawanie wszystkiego do .gitignore)

Muszę powiedzieć, że mam kilka require-devmodułów, które nie powinny znaleźć się na serwerze końcowym - więc posiadanie tych linków byłoby co najmniej niezbyt przyjemne.

Alex
źródło
1
Czy dotyczy to również modmana?
philwinkle
W przypadku modmana zwykle używasz podmodułów git dla każdego rozszerzenia i po prostu dodajesz dowiązania symboliczne do repozytorium. Nie trzeba ich tam wykluczać, wręcz przeciwnie, nie miałoby to większego sensu w scenariuszu wdrażania modmana.
Vinai,
1
@ philwinkle Niedawno zacząłem śledzić katalog główny Magento w osobnym repozytorium ze względów bezpieczeństwa (np. łatwo wykryć zmodyfikowane pliki), aby śledzić zmiany w index.php i Mage.php, a także dla łatwiejszych aktualizacji Magento, tak zdecydowanie istotnych dla modmana, IMO .
ColinM

Odpowiedzi:

8

Najlepsze, co wymyśliłem, to uruchomienie tego po instalacji / aktualizacji kompozytora

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

Polecenie należy uruchomić w katalogu głównym git. Dodaje wszystkie dowiązania symboliczne do pliku .gitignore, których jeszcze tam nie ma.

Vinai
źródło
generuje to ścieżkę jak ./foo/bar... Myślę, że musimy usunąć pierwszą .- czy to zadziałało dla ciebie w ten sposób?
Alex
Działa mi dobrze z wiodącym ., tak. W przeciwnym razie na ratunek:find . -type l -not -exec grep -q "{}" .gitignore \; -print | sed 's/^\.\///'
Vinai,
Właściwie to łamie grep ... no cóż, może i tak jest dobry sposób na oczyszczenie ścieżki ...
Vinai
1
Proste rozwiązanie: find * .... Zaktualizuje moją odpowiedź.
Vinai
3

Ta metoda dodaje tylko nieśledzone dowiązania symboliczne, więc można je powtarzać bez dodawania zduplikowanych wpisów, dowiązań symbolicznych znajdujących się w submodułach lub w inny sposób już ignorowanych lub celowo śledzonych dowiązań symbolicznych.

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

Połączone rozwiązanie @ColinM i @Vinai, które działa dla mnie

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
źródło
Czy zauważyłeś, że niedawni instalatorzy kompozytorów automatycznie wykluczają dowiązania symboliczne?
Alex
Jasne, ale niektóre z moich projektów nie są pod kontrolą kompozytora. Przedstawione tutaj rozwiązania dotyczą nie tylko projektów kompozytorskich, ale także całkowitego ignorowania dowiązań symbolicznych. Mam nadzieję, że to komuś pomoże
martin_mageworx