每次 git pull 后,在 bash 中循环创建符号链接

每次 git pull 后,在 bash 中循环创建符号链接

我有一个场景,我有一个 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 拉取的用户也有权限创建这些链接,...

相关内容