svn教程
SVN教程
基础概念篇
什么是 TortoiseSVN?
TortoiseSVN 是 Subversion 版本控制系统的一个免费 开源客户端,可以超越时间的管理文件和目录。文件保存 在中央版本库,除了能记住文件和目录的每次修改以外, 版本库非常像普通的文件服务器。 你可以将文件恢复到过去的版本,并且可以通过检查历史 知道数据做了哪些修改,谁做的修改。这就是为什么许多 人将 Subversion 和版本控制系统看作一种“时间机器”。 它是一个通用系统,可以管理任何类型的文件集,包括源 代码。
使用何种解决方案
复制-修改-合并方案存在问题就是冲突: • 如果 Sally 和 Harry 的修改重叠了这种情况叫做冲突, 这通常不是个大问题,当 Harry 告诉他的客户端去合并 版本库的最新修改到自己的工作副本时,他的文件 A 就 会处于冲突状态: 他可以看到一对冲突的修改集,并手工 的选择保留一组修改。 • 需要注意的是软件不能自动的解决冲突,只有人可以理解 并作出智能的选择,一旦 Harry 手工的解决了冲突(也许 需要与 Sally 讨论),他就可以安全的把合并的文件保存 到版本库。
将你的修改提交到版本库
还原
• 当需要撤销本地更改时可使用svn还原 • 右键菜单 TortoiseSvn svn还原
解决冲突
• 当本地工作副本处于冲突状态: svn会产生一对冲突的修改集。
•
filename.ext.mine 这是你的文件,在你更新你的工作副本之前存在于你的 的工作副本中——也就是说,没有冲突标志。这个文件除了你的最新修改外 没有别的东西。 filename.ext.rOLDREV 这是在你更新你的工作副本之前的基础版本(BASE revision)文件。也就是说,它是在你做最后修改之前所检出的文件。 filename.ext.rNEWREV 这个文件是当你更新你的工作副本时,你的 Subversion客户端从服务器接收到的。这个文件对应与版本库中的最新版本。
Subversion 缺省使用复制-修改-合并模型,大多数情况下可以满足 你的需求。然而,Subversion 1.2 后还是支持锁定,如果你有不可 合并的文件,或者你只是想实行强制管理策略,Subversion 仍然会 提供你需要的特性。
SVN教程称为重载图标的功能重载了原始的文件图标。 根据文件的 Subversion 状态的不同,重载的图标也不同。
• •
解决冲突
• 你可以通过TortoiseSVN → 编辑冲突运行外部合并工具/冲突编辑器, 你需要指定哪些代码是需要的,做一些必要的修改然后保存。 • 然后,执行命令TortoiseSVN → 已解决并提交修改到版本库。
•
需要注意的是已解决命令并不是真正的解决了冲突,它只是删除了 filename.ext.mine和filename.ext.r*两个文件,允许你提交修改。
• 一个新检出的工作副本使用绿色的对勾做重载。表示 Subversion 状 态正常. • 在你开始编辑一个文件后,状态就变成了已修改,而图标重载变成了 红色感叹号。通过这种方式,你可以很容易地看出哪些文件从你上次 更新工作副本后被修改过,需要被提交。 • 如果在更新的过程中出现了冲突,图标会变成黄色感叹号。 • 如果你给一个文件设置了svn:needs-lock属性,Subversion 会让此 文件只读,直到你获得文件锁。具有这个重载图标的文件来表示你必 须在编辑之前先得到锁。 • 如果你拥有了一个文件的锁,并且 Subversion 状态是正常,这个重 载图标就提醒你如果不使用该文件的话应该释放锁,允许别人提交对 该文件的修改。 • 这个图标表示当前文件夹下的某些文件或文件夹已经被调度从版本控 制中删除,或是该文件夹下某个受版本控制的文件丢失了。 • 加号告诉你有一个文件或目录已经被调度加入版本控制。
显示日志
• 对于每次进行修改和提交,你应该有针对性地留下日志信息。这样, 你就可以在以后方便地看到你都做了什么,为什么这么做。当然这么 做还使你拥有了开发过程的详细日志。 • 版本日志对话框可以获取所有的日志信息,并将其显示出来。对话框 的视图分成3个面板。 • 最上方的面板显示了版本的列表。这其中包含了日期和时间,以及提 交的用户和日志信息开头的部分内容。 • 中间的面板显示了被选中的版本的完整的日志信息。 • 最下面的面板显示了被选中版本中都对哪里文件和文件夹进行了修改。 • 当然,对话框的作用不止于此——它提供了右键菜单,通过它可以获 取更多的项目历史信息。 • 可以查看整个目录的日志,也可以查看单个文件的日志。
现实的问题
提交之前告诉我! 你先不要改,等我改完的! ……
什么是 TortoiseSVN?
锁定-修改-解锁 方案
复制-修改-合并 方案
复制-修改-合并 方案 续
使用何种解决方案
锁定-修改-解锁模型问题就是限制太多 经常会成为用户的障碍:
锁定可能导致管理问题。 锁定可能导致不必要的线性化开发。 锁定可能导致错误的安全状态。
检出工作副本
通过右键菜单“svn检出”调出检出对话框如下图
认证
• • • • 首次检出时会弹出认证框,需要填写svn用户名及密码。 请用自己的用户名密码进行认证。 保存认证。 清除认证:右键菜单 TortoiseSvn 设置 已保存数据 认证
将你的修改提交到版本库
• 将你对工作副本的修改发送给版本库,称为提交修改 • 提交之前要确保你的工作副本是最新的。你可以直接使用 TortoiseSVN → 更新。 • 如果你的工作副本是最新的,并且没有冲突,你就已经为提交做好准 备了,选择你要提交的文件和/或文件夹,然后TortoiseSVN → 提 交.... • 提交对话框将显示每个被改动过的文件,包括新增的、删除的和未受 控的文件。如果你不想改动被提交,只要将该文件的复选框的勾去掉 就可以了。如果你要加入未受控的文件,只要勾选该文件把它加入提 交列表就可以了。 • 确保输入描述你所提交的修改内容的日志信息。这可以帮你回顾做了 什么,什么时候做的。信息的内容可长可短,许多项目规定了要包含 的内容、使用的语言甚至是严格的格式。
显示日志
比较版本差异
• 通过日志信息可以比较任意历史版本的差异 • 调出比较差异工具:选择版本 右键菜单 比较版本差异
重新定位工作副本
• 当远程服务器更换地址时需要在本地重新定位工作副本 • 右键菜单 TortoiseSvn 重新定位 • 输入新的服务器svn地址
问题补充
使用何种解决方案
• 复制-修改-合并模型感觉是有一点混乱,但在实践中,通 常运行的很平稳,用户可以并行的工作,不必等待别人, 当工作在同一个文件上时,也很少会有重叠发生,冲突并 不频繁,处理冲突的时间远比等待解锁花费的时间少。 有一种情况下锁定-修改-解锁模型会更好,也就是你有不 可合并的文件,例如你的版本库包含了图片,两个人同时 编辑这个文件,没有办法将这两个修改合并。