文章目录
- 软件配置管理工具的主要功能
- 两种版本控制模型
- Lock-Modify-Unlock
- Copy-Modify-Merge
- Subversion
- Git
软件配置管理工具的主要功能
- 版本控制
- 变更管理
- 配置审核
- 配置状态统计
- 问题跟踪
- 访问控制和安全控制
两种版本控制模型
Lock-Modify-Unlock
“加锁-修改-解锁”模型
对于版本库中的一个文件,同一时间只允许一个用户修改。
- 锁定可能导致管理问题。一个用户可能过长时间占用文件,导致其他用户无法修改。
- 锁定可能导致不必要的线性化开发。若两个用户修改同一个文件的不同部分,这种修改是不会造成冲突的,但锁定模型强制他们串行工作。
- 锁定可能导致错误的安全状态。对文件的循环等待可能造成死锁。
Copy-Modify-Merge
“拷贝-修改-合并模型”
每个用户读取项目版本库建立一个私有工作副本,用户并行工作,修改各自的副本,最终将各用户的副本合并在一起,形成最终的版本。若副本之间有冲突,需要手动选择保留哪份修改。
复制-修改-合并模型感觉是有一点混乱,但在实践中,通常运行的很平稳,用户可以并行的工作,不必等待别人,当工作在同一个文件上时,也很少会有重叠发生,冲突并不频繁,处理冲突的时间远比等待解锁花费的时间少。
最后,一切都要归结到一条重要的因素: 用户交流。当用户交流贫乏,语法和语义的冲突就会增加,没有系统可以强制用户完美的交流,没有系统可以检测语义上的冲突,所以没有任何证据能够承诺锁定系统可以防止冲突,实践中,锁定除了约束了生产力,并没有做什么事。
- 如果是不可合并的文件,如二进制文件、图片等,此时修订-修改-解锁模型会更好。
Subversion
命令名称 | 功能 |
---|---|
svn add | 将文件、目录或符号链纳入版本控制。(只有带.svn的工程才能使用add) |
svn checkout | 从版本库取出一个工作副本。Checkout 只在第一次链接时操作一次,以后如果进行更新操作,请使用(Update)指令进行相关操作 |
svn commit | 将修改从工作副本发送到版本库 |
svn copy | 拷贝工作副本或版本库的文件或目录 |
svn diff | 显示两个版本或两个路径的区别 |
svn export | 导出一个不带.svn文件夹的目录树 |
svn import | 将未纳入版本控制的文件或目录树提交到版本库。(仅仅是把文件导入到svn服务器中,而这个文件本身还只是一个普通的文件,与svn版本库没有关系) |
svn info | 显示本地或远程条目的信息 |
svn list | 显示版本库中的目录内容 |
svn lock | 锁定版本库中的路径,使得其他用户不能向其提交修改 |
svn log | 显示提交日志信息 |
svn merge | 合并两个版本中的内容 |
svn mkdir | 创建纳入版本控制的新目录 |
svn move | 移动一个文件或目录 |
svn resolved | 删除工作副本中目录或文件的“冲突”状态 |
svn revert | 撤销所有本地修改 |
svn status | 打印工作副本中文件和目录状态 |
svn switch | 更新工作副本至同一个版本库中另一个url |
svn unlock | 解除工作副本或url的锁定 |
svn update | 更新本地工作副本 |
Git
命令名称 | 功能 |
---|---|
git config | 获取并设置储存库或全局变量 |
git clone | 下载一个项目和它的整个代码历史 |
git init | 在当前目录新建一个git代码库 |
git status | 显示有变更的文件 |
git diff | 显示暂存区和工作的差异 |
git add | 添加当前目录的所有文件到暂存区 |
git mv | 改名文件,并放入暂存区 |
git rm | 删除工作区文件,并且将这次删除放入暂存区 |
git commit | 提交暂存区的指定文件到仓库区 |
git log | 显示当前分支的版本历史 |
git blame | 追溯一个指定文件的历史修改记录。 |
git reset | 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变 |
git revert | 新建一个ccmmit,用来撤销指定commit |
git checkout | 在暂存区的本地分支之间切换或新建分支,会覆盖当前工作空间(clone用于获取您没有的存储库,checkout用于在您已有的存储库中的分支之间进行切换。) |
git branch | 列出所有本地分支 |
git tag | 列出所有tag |
git merge | 合并指定分支到当前分支 |
git remote | 查看已配置的远程仓库 |
git fetch | 下载远程仓库的所有变动 |
git pull | 取回远程仓库,并与本地分支合并 |
git push | 上传本地指定分支到远程仓库 |
git stash | 暂时将未提交的变化移除,稍后再移入 |