svn开发常用整理
![](http://images0.cnblogs.com/blog/111770/201504/140947270571143.jpg)
其实tortoise svn也是将账号信息存放在本地的配置文件中
在不同的操作系统下,操作基本类似,首先我们来看一下windows下如何操作的。
以win7为例
1、进入c:/Users/[你的用户名]/AppData/Roaming/Subversion/auth目录,删除该目录下的所有文件;
2、重启eclipse/myeclipse,提交svn的文件就会提示输入用户名和密码了。
XP:
1.C:\Documents and Settings\WangTao\Application Data\Subversion\auth,删除下面所有文件夹,
或者用ultraedit打开svn.simple中的文件,把用户名改了,密码是加密过的,没法改,再提交会提示密码错误,重新输入密码就行了
2. 在eclipse中刷新 svn repo
以mac os x为例(Unix/Linux类似),
1、打开命令行窗口,即用户的根目录(用户的home目录)
$ ls -al
...
drwxr-xr-x 6 linxyz staff 204 2 15 15:55 .subversion
1. 查看你的Eclipse中使用的是什么SVN Interface
windows > preference > Team > SVN #SVN Interface
2. 如果是用的JavaHL, 找到以下目录并删除auth目录.
C:\Documents and Settings\[YourUserName]\Application Data\Subversion\
3. 如果你用的SVNKit, 找到以下目录并删除.keyring文件.
[eclipse]\configuration\org.eclipse.core.runtime
合并的工作是把主干或者分支上合并范围内的所有改动列出,并对比当前工作副本的内容,由合并者手工修改冲突,然后提交到服务器的相应目录里。如果当前工作副本是主干,则合并的范围是分支上的改动,如果工作副本是分支的,则合并范围是主干上的改动,并且一定要注意,合并的起始位置URL一定要和当前的工作副本的URL是相同的。
一、合并一个范围的版本(Merge a range of versions)
此类型应用最为广泛,主要是把分支中的修改合并到主干上来。在主干上点击右键选择合并,然后选择合并类型:合并一个范围的版本。合并的源URL填写的是要合并的分支的URL,待合并的版本范围如果为空,则指的是合并分支上所有的版本,即自从分支创建以来到分支当前最新版本的所有演变。如果只是选择其中一个版本,或者几个版本,那么就表示只是将制定的n个版本的变化合并到主干上。如果只是选择其中一个版本,那么表示只是选择那个版本的修改,之前或之后的修改将不被采纳。
二、复兴合并(Reintegrate a branch)
复兴合并可以理解为是第一种合并类型的一种特例,在复兴合并中,主干可以理解为是自从开创分支之后没有任何修改,而分支是经过修改的,而且合并中分支是没有版本选择的。经过复兴合并,分支中所有的修改都会合并到主干中,合并的结果将使得分支和主干一模一样,从而可以删除分支。
三、合并两个不同的树(Merge two different tress)
此类型与前两种类型不同,第一种类型可以选择分支合并的版本,主干不能选择版本;第二种类型是主干和分支都不能选择合并的版本;而这种类型则是无论是主干还是分支都可以选择合并的版本,即可以选择过去的一个主干版本与分支的某个版本进行合并。合并的时候以选择的分支版本为主,如果选择的主干版本与分支版本有不同的地方,合并时主干部分将被放弃。
起始URL:选择主干目录的URL(应当和当前工作副本的URL一致,这个是所谓的合并点)
结束URL:选择要合并的分支的URL。
起始和结束的版本:一般起始版本应当找到最后一次同步时的版本,如果从没有同步过(第一次合并),则选择创建分支时的版本,结束版本一般是最新版本,如果你不想将某些内容合并进主干的话,也可以选择一个合并点
3.eclipse合并分支的五种情况
Merge a range of revisions | 从主干合并到分支 |
Reintegrate a branch | 从分支合并到主干 |
Change-set based merge | 将主干上的修改合并到分支,需要Collabnet软件 |
Merge two different trees | 合并2个分支到主干 |
Manually record merge information | 从主干到分支,手工指定不需要合并的修改 |
Manually remove merge information | 从主干到分支,手工指定要合并的修改 |
A、放弃自己的更新,使用svn revert(回滚),然后提交。在这种方式下不需要使用svn resolved(解决)
B、放弃自己的更新,使用别人的更新。使用最新获取的版本覆盖目标文件,执行resolved filename并提交(选择文件—右键—解决)。
C、手动解决:冲突发生时,通过和其他用户沟通之后,手动更新目标文件。然后执行resolved filename来解除冲突,最后提交。
5.增加ignore方式
. 方法一
在 Eclipse 中点击菜单 window --> Preferences --> Team --> Ignored Resources
点击 Add Pattern… 按钮添加你要忽略的文件或目录。
2. 方法二
在Eclipse的导航视图中,选中尚未加入版本控制的文件或目录,右键 --> Team --> 添加至SVN:ignore
3. 方法三
在资源管理器中,右键一个未加入版本控制文件或目录,并从弹出菜单选择TortoiseSVN →Add to Ignore List,会出现一个子菜单,允许你仅选择该文件或者所有具有相同后缀的文件。
如果你想从忽略列表中移除一个或多个条目,右击这些条目,选择TortoiseSVN →从忽略列表删除。
4. 方法四
另一个忽略文件的方法是添加这些文件到globalignore list .他们最大的不同是全局忽略列表是一个客户端特性。它会作用到所有的(all)subversion 项目。但只能在pc客户端使用。
Subversion 的忽略模式使用了文件匹配,一种原先在Unix系统中使用meta字符作为通配符的技术。下面的字符有着特殊的意思:
- * 匹配任何字符串,包括空串(没有字符)
- ? 匹配任何单字符
- [...] 匹配任何单在方括号[]内的单字符,在方括号内,一对字符被“-”分隔,匹配任何词汇表(lexically)上在他们中间的字符。例如[AGm-p]匹配任何单个的A,G,m,n,o或者p。
模式匹配是大小写敏感的,这在Windows 平台下会出问题。你可以使用成对的字符来强制忽略大小写。例如,忽略不记 *.tmp 的大小写,那么你可以使用像 *.[Tt][Mm][Pp] 这样的模式。
如果你想要一个官方定义的匹配规则。你可以在关于shell命令行语言的IEEE规范PatternMatching Notation中找到。
6.branch/tag/truck/
根据svn的官方约定,branch用来做分支,进行开发,而tag则是用来保存有里程碑的发布,truck则是主干,有且只有一个
6.1 不用特意去细分tag和branch区别
6.2 如何创建一个远程目录,本地新建一个branches,然后右键,svn-->import即可
6.3 官方文档
6.4 一款好用的SVN可视化工具 RapidSvn
7.svn中的replace
SVN中邪恶的replace
(转载请注明来源于金庆的专栏)
用TSVN客户端删除一个文件, 然后再新建一个同名文件,
可以看到该文件上的图标被打上了TSVN的小红叉.
然后Add, Commit, 就会出现一条replace记录.
replace的操作会有个提示, 就是Add(as replacement)...命令项与普通的Add不同.
意思应该是该文件被替换了.
邪恶之处是以前的更改日志显示不出来了.
用revision graph可以看到所有历史, 只是在replace处是断裂的.
也就是说替换的效果是重新开启一个文件的更改记录, 隐藏之前的记录.
我想不出什么情况下需要这种功能.
更邪恶的是, revert changes from this revision会失败(TSVN 1.4.3).
错误原因是该文件的上个版本不存在.
好像所有的Add操作都是无法revert, 应该算是个缺陷吧?
为了还原该替换,须删除该文件, 然后revert changes from this revision.
Eclipse中的解决办法
右击工程目录–>team–>Show Tree Conflict–>在Eclpise中会出现一个Tab视图显示Tree Conflict的内容,一个一个选择列表中的冲突右击将其标志为已解决,然后回到项目再提交更改就可以了。
看了这个解决办法我才想起了,我在以前曾经提交过org的包,不过后面又删除了那个org包.
虽然删除了看来还有残余信息遗留在工程里面