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

11

Я устанавливаю модули, используя composer.phar.

Это создает файлы символических ссылок publichtml/app/code/community(например) с целью vendor/themodule....

В моем .gitignoreя исключил каталог vendor - но ссылки, конечно же, все равно оказались бы в git.

Есть ли простой способ автоматически исключить эти ссылки? (кроме добавления всего вручную в .gitignore)

Я должен сказать, что у меня есть некоторые require-devмодули, которые не должны попадать на конечный сервер - поэтому иметь эти ссылки было бы по крайней мере не очень приятно.

Alex
источник
1
Это относится и к модману?
Philwinkle
С modman вы обычно используете подмодули git для каждого расширения и просто добавляете символические ссылки в репозиторий. Нет необходимости исключать их там, наоборот, это не имело бы смысла в большинстве случаев при развертывании модмана.
Винай
1
@philwinkle Недавно я начал отслеживать корень Magento в отдельном репо по соображениям безопасности (например, легко обнаруживать измененные файлы), чтобы отслеживать изменения в index.php и Mage.php, а также для более простых обновлений Magento, которые, безусловно, актуальны и для modman, IMO. ,
ColinM

Ответы:

8

Лучшее, что я придумал, это запускать это после установки / обновления композитора

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

Команда должна быть запущена в корневом каталоге git. Он добавляет все символические ссылки в файл .gitignore, которых там еще нет.

Vinai
источник
Это создает путь как ./foo/bar... Я думаю, что мы должны удалить первый .- это сработало для вас так?
Алекс
У меня отлично работает с ведущими ., да. Остальное успокоил:find . -type l -not -exec grep -q "{}" .gitignore \; -print | sed 's/^\.\///'
Vinai
На самом деле, это нарушает grep ... ну, может быть, есть хороший способ очистить путь в любом случае ...
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
ColinM
источник
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
источник
Вы заметили, что последние установщики композиторов автоматически исключают символические ссылки?
Алекс
Конечно, но некоторые из моих проектов не находятся под контролем композитора. А предлагаемые здесь решения предназначены не только для проектов композиторов, но и для полного игнорирования символических ссылок. Надеюсь, это кому-нибудь поможет
martin_mageworx