打zZ~瞌睡 Menu

团队协作是相当重要的,项目的成功与失败、团队的稳定与发展,都与协作有着密不可分的关系。

SVN导出两个版本之前添加或修改过的文件

在工作中,由于某种原因,部署于正式版本的代码不是由SVN直接更新的,这样在经过几次修改提交之后再发布修改的内容时会有点麻烦,需要对每个版本修改过的文件逐个检查上传。下面这个脚本文件可以导出两个版本之间添加过修改过的文件,导出后一起上传就可以了。

在工作中,由于某种原因,部署于正式版本的代码不是由SVN直接更新的,这样在经过几次修改提交之后再发布修改的内容时会有点麻烦,需要对每个版本修改过的文件逐个检查上传。下面这个脚本文件可以导出两个版本之间添加过修改过的文件,导出后一起上传就可以了。

#!/bin/bash

if [ ! $1 ] || [ ! $2 ] || [ ! $3 ] || [ ! $4 ]; then
    echo "Please enter a revision from, revision to, SVN repository, and target directory"
    exit
fi

# set up nice names for the incoming parameters to make the script more readable
revision_from=$1
revision_to=$2
repository=$3
target_directory=$4

# the grep is needed so we only get added/modified files and not the deleted ones or anything else
# if it's a modified directory it's " M" so won't show with this command (good)
# if it's an added directory it's still "A" so will show with this command (not so good)

for line in `svn diff --summarize -r$revision_from:$revision_to $repository | grep "^[AM]"`
do
    # each line in the above command in the for loop is split into two:
    # 1) the status line (containing A, M, AM, D etc)
    # 2) the full repository and filename string
    # so only export the file when it's not the status line
    if [ $line != "A" ] && [ $line != "AM" ] && [ $line != "M" ]; then
        # use sed to remove the repository from the full repo and filename
        filename=`echo "$line" |sed "s|$repository||g"`
        # don't export if it's a directory we've already created
        if [ ! -d $target_directory$filename ]; then
            directory=`dirname $filename`
            mkdir -p $target_directory$directory
            svn export -r $revision_to $line $target_directory$filename
        fi
    fi
done

# to summarize any deleted files or directories at the end of the script uncomment the following line
#svn diff --summarize -r$revision_from:$revision_to $repository | grep "^[D]"

将文件保存为svndiff,并将权限改为0755,使用方法:

# $from_version: 起始版本号
# $to_version  : 结束版本号
# $svn_repository: svn版本库地址,也可以是本地svn路径
# $target:         导出目录
svndiff $from_version $to_version $svn_repository $target

项目正式上线前需要检查的内容

以前项目上线之后总是有小问题的反馈,总结之后发现是上线前检查的不全面,所以根据以往的项目经验,总结了项目上线前需要检查的内容列表。

当然根据项目不同,可能各个检查点的侧重点不同,具体项目可能还需要细化。

CHECKLIST

CMS中前端与程序开发之间的合作方式

由于项目开发流程的约定,之前的项目合作方式一直是:

  1. 设计师将设计稿交由客户确认
  2. 前端将确认页面的PSD切成HTML页面,交由客户确认
  3. 确认的页面交由后台进入开发

考虑到开发时间和成本的关系,HTML没有放到版本控制软件进行跟踪。也由于每一步都交由相应人员确认,看似没有问题的流程其实是存在隐患的:那就是项目不时会进行小的调整和修改。前端页面开发人员在进行了小的HTML结构调整之后,要进行记录,口头转述给后台开发,以免有所遗漏。后台开发人员也很认真,每次都进行相应的记录。但是项目改动频繁或有大量琐碎的修改的时候,耗费的时间、人力和沟通成本无疑是相当可观的。

改进1:前端开发的HTML页面一样要归并到版本控制里,但是为了让前端开发有一个干净的文件目录,所以单独新建一个目录放HTML页面,避免前端开发也更新到CMS中的文件。这样每一次修改都有所追踪,也方便后台人员跟踪修改,节约了时间成本。只是还有另外一点不足:因为前端页面和CMS的模版在不同的文件夹内,所以css和js都需要后台人员手动合并。

改进2:在CMS的模版文件夹内建立css/images/js目录的软链接,链接至HTML文件夹内的目录,这样前端开发人员提交的修改,后台开发只需更新,就可应用为最新的样式,只需要按照修改记录更改HTML结构的改动就可以了。另外虽然有版本控制,但是我还是建议后台开发不要直接修改前端的css/js文件,如果有修改的话或者反馈到前端人员修改,或者引用另外的文件,以覆盖的方式重写样式和功能,尽量减少工作内容的耦合性,提高代码的可维护性。