我有一个场景,我有一个 git 存储库,我每 x 分钟执行一次 git pull,在以下目录中:/opt/repo/
在这个存储库中我有一些目录,例如:
- /opt/repo/dir1
- /opt/repo/dir2
- /opt/repo/dir3
它们是在 repo 上动态创建的,并在每次 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
在您的存储库根目录中,您将有一个.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 拉取的用户也有权限创建这些链接,...