配置hooks使svn提交后自动同步客户端代码(客户端与服务端在同一台机器上)
1、配置svn的hooks
2、实例演示
1、配置svn的hooks
1.1)配置情况
承接上篇svn搭建的文章,今次继续使用上篇文章的配置
上篇文章的地址:linux下搭建svn代码库
svn仓库所在的目录为/opt/svn/firsttest
1.2)修改hooks文件post-commit
我们的任务需求是:当firsttest代码仓库有任何人提交了代码之后,本机器上的某个位置的副本就需要立刻进行svn up操作,这样达到副本的内容和代码仓库的内容相同,可以实时看到情况的目的。
根据上述的要求,分析下来就是,当有人在 firsttest 提交了代码之后,我们的副本也需要进行更新。所以,我们需要修改的hooks文件就是firsttest/hooks/post-commit。
查看firsttest/hooks/目录下面的文件:
# ls post-commit.tmpl post-unlock.tmpl pre-revprop-change.tmpl post-lock.tmpl pre-commit.tmpl pre-unlock.tmpl post-revprop-change.tmpl pre-lock.tmpl start-commit.tmpl
并没有发现 post-commit 文件,但是可以发现有个 post-commit.tmpl 文件,我们需要做的就是把这个文件重命名成post-commit,或者拷贝一份副本,起个名字叫post-commit。
# cp post-commit.tmpl post-commit root@OutRoot:hooks# ls post-commit post-revprop-change.tmpl pre-lock.tmpl start-commit.tmpl post-commit.tmpl post-unlock.tmpl pre-revprop-change.tmpl post-lock.tmpl pre-commit.tmpl pre-unlock.tmpl
现在有 post-commit 文件了,但是还差点儿,把它的权限改为775:
# chmod 775 post-commit root@OutRoot:hooks# ls post-commit post-revprop-change.tmpl pre-lock.tmpl start-commit.tmpl post-commit.tmpl post-unlock.tmpl pre-revprop-change.tmpl post-lock.tmpl pre-commit.tmpl pre-unlock.tmpl
# ls -al post-commit
-rwxrwxr-x 1 root root 1977 06-05 13:47 post-commit
1.3)编辑 hooks 文件 post-commit
从 post-commit 的文件名我们就可以看出,是在 commit(合入代码)之后(post)所进行的操作。
以下是 post-commit 文件的前几行:
#!/bin/sh
# POST-COMMIT HOOK
#
# The post-commit hook is invoked after a commit. Subversion runs
# this hook by invoking a program (script, executable, binary, etc.)
# named 'post-commit' (for which this file is a template) with the
# following ordered arguments:
看英文的大概意思是:post-commit 钩子文件是在执行完一次commit之后执行的。这个hook会执行一个脚本或者可执行文件、二进制文件等。
那么我们就在这里写上我们需要svn执行的脚本。
把 post-commit 文件的最后几行改成如下内容:
REPOS="$1" REV="$2" #mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf su -c 'svn up /home/test/workspace/firsttest' test
其中“su -c 'svn up /home/test/workspace/firsttest' test”这句话的意思是:
切换到test账户,就是你的svn副本是哪个账户就切换到哪个账户,要是root就直接运行“svn up /home/test/workspace/firsttest”就可以了。
之所以要切换账户,是因为在svn进行update操作的时候会对副本里面的.svn目录下的内容进行修改,有可能会添加新的文件或目录,这样会导致之后的副本里面使用非root账户操作的时候失败。
2、实例演示
好累,就先不写了吧。。。
作 者:fengbohello
个人网站:http://www.fengbohello.top/
E-mail : fengbohello@foxmail.com
欢迎转载,转载请注明作者和出处。
因作者水平有限,不免出现遗漏和错误。希望热心的同学能够帮我指出来,我会尽快修改。愿大家共同进步,阿里嘎多~