У меня есть сценарий, в котором у меня есть git-репозиторий, который я выполняю git pull каждые x минут, в следующем каталоге: /opt /repo /

В этом репозитории у меня есть несколько каталогов, таких как:

  • / Опт / репо / dir1
  • / Опт / репо / dir2
  • / Опт / репо / dir3

которые создаются в репо динамически и извлекаются при каждом git pull.

Что мне нужно сделать, это после каждого git pull создать символическую ссылку для этих каталогов (только новых) по другому пути:

/var/www/themes/

Вручную, я делаю следующее:

$ cd /var/www/themes
$ ln -s /opt/repo/dir1 . 
$ ln -s /opt/repo/dir2 . 
$ ln -s /opt/repo/dir3 . 

Есть ли способ сделать это в каждом звонке? Я не хочу воссоздавать существующие символические ссылки, просто создаю для тех, которые еще не существуют.

====

Решение SYN работает, мне просто нужно было инвертировать -maxdepth и набрать порядок (я запускал его на Ubuntu 16, это важно).

1 ответ1

0

В корне вашего хранилища у вас будет .git . Там вы сможете установить хук после обновления:

$ cd /opt/repo
$ test -d .git/hooks || mkdir .git/hooks
$ cat <<EOF >.git/hooks/post-update
#!/bin/sh

cd /opt/repo
find . -maxdepth 1 -type d | while read dir
    do
        test "$dir" = .git && continue
        test -e "/var/www/themes/$dir" && continue
        ln -sf "/opt/repo/$dir" /var/www/themes
    done
EOF
$ chmod +x .git/hooks/post-update

Это при условии, что пользователь, извлекающий информацию из git, также имеет права на создание этих ссылок ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .