Як Git-Ignore Symbolks на модулі Magento, встановленому композитором


11

Я встановлюю модулі за допомогою composer.phar.

При цьому створюються файли посилань у publichtml/app/code/community(наприклад) із цільовим на vendor/themodule....

В моєму випадку .gitignoreя виключив каталог постачальників - але посилання, звичайно, все-таки опиняться в git.

Чи існує простий спосіб автоматичного виключення цих посилань? (крім додавання всього вручну до .gitignore)

Я мушу сказати, що у мене є деякі require-devмодулі, які не повинні закінчуватися на кінцевому сервері - тому мати ці посилання там було б принаймні не так приємно.


1
Чи стосується це і модмана?
philwinkle

З модменом ви зазвичай використовуєте підмодулі git для кожного розширення та просто додаєте символьні посилання до сховища. Не потрібно їх виключати там, навпаки, в сценарії розгортання модману це мало б сенсу.
Vinai

1
@philwinkle Нещодавно я почав відстежувати корінь Magento в окремому репо з міркувань безпеки (наприклад, легко виявляти змінені файли), відслідковувати зміни до index.php та Mage.php, а також для більш легких оновлень Magento, настільки важливих як для модерна, IMO .
ColinM

Відповіді:


8

Найкраще, що я придумав, це запустити це після встановлення / оновлення композитора

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

Команда повинна бути запущена в кореневому каталозі git. Він додає всі посилання на файл .gitignore, якого ще немає.


це генерує шлях, як ./foo/bar.. Я думаю, що нам доведеться зняти перше .- чи працювало це для вас?
Алекс

Для мене добре працює з ведучими ., так. Ще на допомогу:find . -type l -not -exec grep -q "{}" .gitignore \; -print | sed 's/^\.\///'
Vinai

Насправді це зламає гріп ... ну, можливо, є хороший спосіб очистити шлях в будь-якому випадку ...
Vinai

1
Просте рішення: find * .... Оновлю мою відповідь.
Vinai

3

Цей метод додає лише відслідковувані символьні посилання, тому їх можна повторити, не додаючи повторюваних записів, символьних посилань, які знаходяться в підмодулях або інакше вже ігноруються, або навмисно відслідковуються символьні посилання.

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


1

Комбіноване рішення @ColinM та @Vinai, яке працює для мене

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.