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

Jor*_*ter 3 bash svn

我有一个 SVN 存储库,其中存储了许多子项目。现在在我的post-commit我只是遍历机器上所有可能的文件夹并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
Run Code Online (Sandbox Code Playgroud)

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

有没有办法做到这一点?据我所知,无法确定提交了存储库的哪一部分,因此需要更新哪个目录。

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

qua*_*nta 5

我想知道是否有更好的方法来确定我应该使用哪个 DIRS 并且只更新那个。

svnlook dirs-changed 是你要找的:

# svnlook dirs-changed -r 40270 /path/to/the/repo
project1/foo/bar
Run Code Online (Sandbox Code Playgroud)

尝试这样的事情:

# svnlook dirs-changed -r 40270 /path/to/the/repo
project1/foo/bar
Run Code Online (Sandbox Code Playgroud)