bash – 编写一个更新已提交代码副本的SVN钩子

前端之家收集整理的这篇文章主要介绍了bash – 编写一个更新已提交代码副本的SVN钩子前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个SVN存储库,其中存储了很多子项目.现在在我的提交后,我只需遍历机器上所有可能的文件夹,然后对每个文件夹运行svn update:
REPOS="$1"
REV="$2"
DIRS=("/path/to/local/copy/firstproject" "/path/to/local/copy/anotherproject" ... "/path/to/local/copy/spam")
LOGNAME=`/usr/bin/whoami`

for DIR in ${DIRS[@]}
do
    cd $DIR
    sudo /usr/bin/svn update --accept=postpone 2>&1 | logger
    logger "$LOGNAME Updated $DIR to revision $REV (from $REPOS) "
done

问题是,当我提交其中一个项目的子文件夹时,这是缓慢而冗余的.我想知道是否有更好的方法来确定我应该使用哪个DIRS并且只更新那个.

有办法做到这一点吗?据我所知,无法确定repo的哪个部分已提交,因此需要更新哪个目录.

是为每个项目创建单独存储库的唯一选择吗? (可能应该从一开始就这样做,如果是的话……)

I’m wondering if there’s a better way of identifying which of the DIRS
I should use and only update that one.

svnlook dirs-changed正是您要找的:

# svnlook dirs-changed -r 40270 /path/to/the/repo
project1/foo/bar

尝试这样的事情:

#!/usr/local/bash4/bin/bash

typeset -A IP
typeset -A DOCROOT

PROJECTS="project1 project2"

IP=([project1]="ip1" [project2]="ip2")
DOCROOT=([project1]="/var/www/html/project1/" [project2]="/var/www/html/project2/")

REPO="$1"
REV="$2"

USER='deployer'

PROJECT=`svnlook dirs-changed -r "$REV" "$REPO" | awk -F "/" '{ print $1 }'`

ssh -t "$USER@${IP[$PROJECT]}" "cd ${DOCROOT[$PROJECT]} && svn up"
原文链接:https://www.f2er.com/bash/385283.html

猜你在找的Bash相关文章