如何用tortoisesvn 本地文件管理本地文档

什么是 TortoiseSVN?
SVN 全名是 Subversion,它是一个开源的版本控制软件,与它类似的软件有 CVS,VSS,ClearCase。只要接触过团队开发,对这类软件肯定不会陌生。而 SVN 作为一个跨平台的开源软件,具有很强的活力,目前也已经相当成熟,很多开源项目都用它来管理文档或是代码。
更为重要的是,不仅仅是团队开发,作为个人独立开发的项目(或者个人想维护的文档)也可以用 SVN 进行管理,而不需要另外一台服务器。
TortoiseSVN 是 SVN 的一个 Windows 外壳扩展应用,它可以帮助用户直观的进行 SVN 的各种操作,而不需要使用命令行。作为个人用户,只要安装 TortoiseSVN 即可,而不用再去安装配置 SVN。 
TortoiseSVN 快速入门
下面我就来对 TortoiseSVN 从安装到第一个代码库的建立和使用做一个最简单的介绍。即使对 TortoiseSVN 一无所知,通过下面的操作,也可以初步领略 SVN 管理代码的乐趣。
TortoiseSVN 的官方主页:http://tortoisesvn.net,首先下载当前版本的 TortoiseSVN,希望能有中文界面的还可以选择语言包下载。同时在语言包旁边,你还可以看到中文的使用手册。
安装 TortoiseSVN 非常简单,在结束后会提示重启,这是因为 TortoiseSVN 与资源管理器整合,它的图标功能需要重启后才能使用,所以建议这里重启一下。
这个时候,在任何一个文件夹点右键,就会出现如下的菜单:
如果是英文界面,那么在 TortoiseSVN --& Settings 中可以选择语言。TortoiseSVN 的所有操作都是通过右键菜单来完成的。
二,创建版本库
首先,我们要新建一个文件夹来保存 SVN 的数据,比如我们建立了一个空文件夹:"D:\MySVN"。在这个文件夹图标上点击右键,在菜单中选择:在此创建版本库,很快就会提示建立完成。
这个时候,你会发现这个文件夹里面会增加好多文件,它将保存你的用户权限的设置以及所有的代码信息。现在不用管它,按照默认设置就可以很好工作。以后如果要在另外一台机器上修改代码,或者希望别人也能使用你的代码库,只要把这个文件夹复制过去就行。备份也是如此。
注:从网上看早期的教程,那些文章在这一步会提到选择 Berkeley 数据库(BDB)或者本地文件系统(FSFS)。但是从 SVN 1.5 版本开始,已经取消了 BDB 的选择,直接默认的就是 FSFS。
注:为了避免因为多字节字符造成的种种问题,建议把版本库的路径和名字不要含有中文或者空格。这个问题虽然可能随着软件的升级得到解决,不过目前看来,有时还会出问题。不过这个问题仅限于版本库,受管理的代码和目录可以任意取名。
三,检出到工作目录
完成上一步后,我们已经建立了一个代码仓库,下面就是要设置工作目录。工作目录一般来讲,就是存放了当前最新版本的代码,程序的编写和修改都在这个目录完成。比如我们在桌面选择一个文件夹,名叫 Project。在这个文件夹图标上,点击右键,选择:SVN 检出。
然后在版本库 URL 中选择刚才创建的版本库:file:///D:/MySVN,点击确定,就开始从版本库中获取代码了。
自然,因为我们版本库是空的,所有什么代码也没有。如果你打开隐藏文件显示,会发现多了一个 .svn 的文件夹,它存放的是本地文件版本控制的信息,不要删除或者修改它,以后工作目录的每层路径都会有 .svn 文件夹。为了防止误删这个文件夹,我们不显示隐藏文件。
刷新一下桌面,会发现我们的 Project 文件的图标左下角会多出一个绿色的对号,这表明它已经纳入了版本控制。
注:你可以在任何地方多次检出。
四,提交入库
第一次向版本库中加入代码可以使用导入的功能,不过我还是喜欢直接添加文件。比如我向 Project 中复制了几个目录和文件。因为这些文件是新增的,所以自动会用问号来标记。
然后我希望把这些文件存放到代码仓库中,这个时候,在 Project 文件夹内点击右键,选择:SVN 提交,然后勾选"全选",把新增的所有文件都纳入版本控制,点击确定。
五,版本管理
我们开始工作,比如新增文件、修改文件、删除文件,你会发现所有修改过的文件都会有一个红色叹号来标记。当觉得工作进行到一定阶段,有必要保存一下的时候,我们可以再次进行提交。因为现在讲解的是一个人使用,所以很少会再次检出或者进行更新,但这在团队开发中很常用。
如果你发现你这次的修改有问题,想恢复版本库中最新的版本,只要把这个文件删除,并选择更新即可。
在某种情况下,要恢复一个很久之前的版本,这个时候只要点击右键,选择:显示日志,在想复原的版本上点右键,选择:复原到此版本。
通过上面简单的介绍,希望能带大家入门。更多的操作可以参考官方的文档,非常详细。
Source URL: /svnpz/1.html
阅读(...) 评论()详细使用TortoiseSVN的步骤如何使用TortoiseSVN(例如远程维护代码),请详细说明它的使用过程,包括它的配置,以及使用条件
TortoiseSVN是一个SVN的客户端,下面是我以前不知道从哪复制的大致使用,希望对你有用:五.客户端的使用
1.Checkout Repository
首先要Checkout服务器端的Repository, 所谓的Checkout就是指获得服务器端指定的Repository存储的所有文件. 这个Checkout和Visual Source Safe的Checkout意义完全不一样, VSS的Checkout指的是锁定某个文件,如果你以前使用过VSS, 在学习Subversion时这个问题一定要注意. Checkout的具体方式是: 在客户端新建一个空目录,比如:F:\Project1
在该目录上单击右键,在弹出式菜单中选中SVN Checkout..., 之后在“URL of Repository”文本框中填入你想要连接的Repository的地址, 这个URL地址可以用浏览方式加入. 对于在本教程第二节建立的Repository, URL应该是“svn://xxx/project1” (xxx可以是服务器端主机名,也可以是服务器端的ip地址).
然后点OK,会弹出一个认证对话框, 输入在教程第三节设置的用户名和密码. 点OK后就完成了对Repository的Checkout. 比如:在服务器端Repository中有一个a.txt文件, 那么Checkout之后F:\Project1目录下也会出现一个a.txt文件. 在本例中由于服务器端的Repository还未添加任何文件, 所以在客户端的F:\Project1下没有文件被Checkout. 执行Checkout除了会在F:\Project1产生Repository存储的文件及目录外, 还会产生了一个“.svn”的隐含目录,该目录是由subversion管理的, 不要删除或者手工改动其中的文件和目录. 现在F:\Project1中的文件和目录就叫做Repository的“Working Copy”简写“WC” (这个简写...汗). 以后对Repository中文件和目录的修改,添加,删除的操作, 都是通过对这个“Working Copy”的操作实现的. Checkout执行完后, 会发现F:\Project1目录的图标的左下角附着了一个小的状态图标 (当F:\Project1目录中的文件改变时,这个状态图标也会随之变化), 它表示F:\Project1是一个Repository的“Working Copy”, F:\Project1内的所有文件和目录也会有类似的状态图标.
2.添加文件
将要添加的文件或者目录拷贝到F:\Project1下, 然后在该文件或目录上单击右键,TortoiseSVN->Add,点OK. 如果添加了不止一个文件或目录, 则鼠标不要在F:\Project1中点中任何文件, 然后单击右键,TortoiseSVN->Add, 就可以添加多个文件或目录. 这时文件的状态图标会发生变化. Add命令只是告诉本地的“Working Copy”将该文件纳入版本管理, 并没有将这个改变提交到服务器端, 如果想要别人也看见你对Repository的修改,你需要
在F:\Project1下单击右键,SVN Commit..., 将你所做的修改提交到Repository. 文件的状态图标也会更新. 不管你在“Working Copy”内添加、修改、删除文件后, 要想其他人也看见你的修改, 都必须用Commit命令将所做修改递交到服务器端的Repository.
3.修改文件
用文本编辑器或IDE对文件修改后, 文件的状态图标会变化, 然后单击右键,SVN Commit...
提交修改,只有当执行Commit提交修改后, 你所作的修改才会反映到服务器端的Repository中.
4.删除文件
删除文件时,选中要删除的文件或目录, 单击右键,TortoiseSVN->Delete,提交修改. 注意千万不要用“Delete”键来删除文件,否则将无法提交你的修改. 这一点对目录的删除来说尤为重要.
5.放弃修改
当你添加、修改、删除文件后,决定放弃修改, 你可以单击右键,TortoiseSVN->Revert, 本地的“Working Copy”中的文件和目录会恢复到你修改前的状态.
6.获取Repository的最新版本
当一个团队合作开发项目时, 每一个人都在不断的对Repository进行更新, 你需要不断的更新自己的“Working Copy”, 以获取项目最新的文件. 当第一次获得最新Repository的文件时, 我们用Checkout命令,前面已经介绍了, 以后再获取最新文件时就不用Checkout了. 而改用Update命令. 接着前面的例子,这时F:\Project1已经成为一个“Working Copy”了 (通过执行Checkout命令),现在其他人已经对Repository进行了修改, 我想将别人的修改反映到我的“Working Copy”中, 具体的方法是:在F:\Project1目录上单击右键, SVN Update.这时F:\Project1中的文件就是最新的版本了. 注意,如果当你的“Working Copy”中有被修改的文件, 或者有被删除的文件,并且还未提交这些修改时, 这些文件在执行Update过程中是不会被更新的. 比如你修改了F:\Project1下a.txt文件, 还未提交修改,那么, 当你对F:\Project1进行Update时, a.txt文件是不会更新为Repository上的a.txt文件的. 所以如果想放弃当前的所有修改, 并将F:\Project1下所有文件及目录更新到最新版本, 应该先对F:\Project1执行Revert命令再执行Update命令.
7.subversion的版本控制模型
当你用subversion进行版本控制时, Subversion会记录你对Repository进行的每一次修改(包括添加,修改,删除等等), 每修改一次Repository都会产生一个新的Revision(修订版本号), 不同的Revision代表了不同时刻Repository的状态, 因此我们可以用这个Revision回朔任意时刻Repository的状态, 就像时间机器一样,也就是说某一Revision 就是Repository在某一时刻的一个“快照”. 注意:Revision不是针对某一个文件或者目录, 而是针对整个Repository而言的. 每修改一次Repository,Revision 都会增加1.
Subversion的版本控制模型是一种叫做Copy-Modify-Merge (拷贝-修改-合并)的模型. 考虑这种情况: 张三和李四是公司同一个部门的同事, 他们共同维护一个文本文件a.txt, 并且对该文件进行版本控制, 因此他们把这个文件放到一个Repository上共同维护该文件. 周一上午9点,张三和李四同时想对a.txt文件进行修改, 于是他们同时从Repository上取得该文件的最新版本(Revision 10), 然后进行修改.过了三分钟,张三首先完成了修改, 他在该文件的第五行修改了一个单词的拼写(将Typo改为Type), 于是张三对修改后的文件执行Commit命令, 将修改提交到服务器端的Repository中. 这时Repository的Revision变为11. 六分钟过后,李四也完成了他的修改, 他修改了该文件第十行上的一个单词拼写(将He改为She), 于是他也对修改后的文件执行Commit命令, 这时Subversion 在提交修改时会发现, 李四修改的文件是Revision10的a.txt文件, 而不是最新的Revision 11的a.txt文件. 于是,Subversion 提示李四在提交修改前, 应该先将Working Copy更新到最新版本, 李四执行Update命令将Working Copy更新到Revision 11, 这时Subversion会提示已经完成合并, 李四的a.txt文件的第五行的“Typo”已经变为了“Type”, 第十行还是“She”,就是说Subversion已经将张三的修改“合并”到李四的a.txt文件中了. 之后,李四再执行Commit命令,就能将他对第十行的修改(将He改为She) 提交到服务器端的Repository中了(生成Revision 12). 但是这种合并在某些情况下会变得复杂一些, 比如:李四对a.txt文件的修改并不是第十行, 而是与张三同样修改第五行的单词, 李四将“Typo”改为“Typr”,并且提交修改, 这时Subversion会提示李四在提交修改前, 应该先将Working Copy更新到最新版本, 李四执行Update命令将Working Copy更新到Revision 11, 这时Subversion将Revision11的a.txt文件与 李四修改的a.txt文件进行合并时发现李四修改的同样是第五行, 于是Subversion就无法判断是李四的修改(“Tpyr”) 正确还是张三的修改(“Type”)正确, 因为他们都是在Revision10的a.txt基础上作的修改. 这种情况叫做Conflict(冲突), a.txt文件的图标会变成一个黄色三角. 这时,只能依靠李四自己去判断到底第三行应该修改为“Typr”还是“Type”. 当李四确定修改之后,在a.txt文件上单击右键,TortoiseSVN->Resolved
告诉Subversion已经解决了Conflict. 这时再执行Commit命令就能提交修改(生成Revision 12). Subversion 这种控制方式保证了你对文件所作的修改都是基于文件的最新版本.
8.“.svn”目录
在客户端Working Copy的每一层目录中都会有一个“.svn”目录, 该目录是Subversion进行管理用的目录. 不要手动修改其中的文件. 该目录存储了Working Copy的一个副本 (实际存储副本的地方是F:\project1\.svn\text-base目录), 比如:F:\Project1是一个Working Copy, 该目录下有两个文件a.txt和b.txt还有一个子目录ccc, 子目录ccc中还有一个d.txt文件. “.svn”目录中存储的是你最近一次执行完Update或者Commit命令之后当前目录中文件的副本, 比如:F:\project1\.svn\text-base中存储的a.txt和b.txt 是最近一次执行完Update或者Commit命令之后F:\project1下的a.txt和b.txt的拷贝. 也就是说你所作的修改都是基于“.svn”目录存储的那些文件. 这种机制可以让我们在不连接网络的情况下, 将Working Copy中的文件恢复到修改之前的状态. Subversion的Revert命令就是利用了这种机制来实现的. 比如你修改了F:\project1\a.txt文件, 这时你又改变了主意想放弃对该文件的修改, 你可以单击右键,TortoiseSVN->Revert, 修改过的F:\project1\a.txt文件 就会被F:\project1\.svn\text-base中a.txt文件的副本所替代, 使得a.txt恢复到修改前的状态.
Working Copy中每一个子目录下都会有一个“.svn”目录, 并不是只有最上层目录才有“.svn”目录. 所以,F:\project1\ccc下也有一个“.svn”目录, 该目录存储的是F:\project1\ccc\d.txt的副本 (d.txt的副本位于F:\project1\ccc\.svn\text-base). 也就是说每个“.svn”目录只存储同级目录中的“文件”副本, 而不存储“目录”副本.“.svn”目录存有许多重要的内容, 所以前面说在删除文件或目录时, 必须用TortoiseSVN->Delete, 而不能用“Delete”键来删除文件或目录,尤其是对于目录的删除.
9.混合版本
Subversion的Working Copy被设计成一种能够包含不同版本的文件共存的形式. 比如F:\Project1是一个Working Copy, 该目录下有两个文件a.txt和b.txt. 执行Update命令,将Working Copy更新到最新版本(Revision 24). 这时,a.txt和b.txt的Revision都是24 (其实对于单个文件来说并不存在Revision, Revision是对于整个Repository而言的, 这里所指的是Repository的Revision24所存储的a.txt和b.txt, 但为了方便而采用这种描述方式,请注意,下同). 之后,你的同事修改了a.txt,并且提交了修改, 这时Repository的Revision就变成25了. 注意,这时你没有再次执行Update, 因此你的Working Copy的Revision还是24. 这时你修改了b.txt文件,并提交修改. 因为Revision25并没有对b.txt文件进行修改, 因此你对b.txt文件的修改是基于b.txt文件最新的版本, 所以不会出现Conflict. 当你提交b.txt的修改后,产生Revision26. 这时你会发现你的Working Copy中的a.txt文件并不是Revision25中的a.txt文件, 它还是Revision24的a.txt文件,而你的b.txt文件是Revision26的b.txt文件. 也就是说当你Commit时,你的Working Copy中只有你提交的那些文件是最新版本, 而其他没有修改的文件并不会更新为最新版本. 这样就造成了你的Working Copy由不同的Revision文件所组成 (Revision24的a.txt文件和Revision26的b.txt文件). 前面说过在提交修改前必须保证你是在文件的最新版本基础上修改, 如果在这种混合版本的情况下, 怎样才能知道当前Working Copy中的文件是否为最新版本? 在前面所说的“.svn”目录中有一个文件名为“entries”的文件, 该文件记录了当前Working Copy中的每一个文件的Revision, 因此当你Commit时,Subversion会从该文件中取得你提交文件的Revision, 再与Repository的最新Revision一比较就可以知道你修改的文件是否基于该文件的最新版本.
10.文件的锁定
前面说过Subversion的版本控制模型是一种叫做Copy-Modify-Merge (拷贝-修改-合并)的模型. 该模型在对文本文件进行版本控制时工作的很好, 但是有些需要进行版本控制的文件并不是文本文件, 比如说图像文件,这种模型在这种情况下就不能正常工作了, 因为文本文件可以合并,而二进制文件则无法合并. 所以Subversion从1.2开始支持一种叫Lock-Modify-Unlock (锁定-修改-解锁)的版本控制模型. 在Windows下最常用的版本控制软件Visual Source Safe(VSS)就是采用这种模型. 这种模型要求在对一个文件修改前首先要锁定这个文件, 然后才能修改,这时,别人将无法对该文件进行修改, 当修改完后再释放锁,使其他人可以对该文件进行锁定,然后修改. 锁定文件的方法是:TortoiseSVN->Get Lock...再点OK按钮, 这时就完成了对文件的锁定. 这时,如果其他人想对文件进行锁定时, Subversion会对他提示该文件已经被别人锁定. 当你修改完文件后,然后单击右键,SVN Commit..., 将修改提交,默认情况下,提交的时候就会对该文件解锁, 如果你想仍然锁定该文件,请在commit时弹出的对话框中选中keep lock复选框.
11.文件的附加属性
在Subversion中,每个文件可以拥有一种叫做附加属性的东西. 附加属性描述了该文件所拥有的一些特性. Subversion已经预定义了一些附加属性 (这里只是指Subversion已经定义了一些附加属性的“名称”, 并不是指已经将这些属性附加在文件上了, 比如默认情况下文本文件一开始不含任何属性, 直到人为的对该文件添加附加属性), 并且你可以对文件添加自定义的属性. Subversion对待附加属性就像对待文件内容一样, 当修改了一个文件的附加属性(添加,改变,删除附加属性), 即使没有对文件的内容进行修改, 同样可以Commit该文件,就像更改了文件内容那样, Repository也会生成新的Revision, 所以从某种意义上来说, Subversion不区别对待文件的附加属性的修改和文件的内容的修改, 文件的附加属性可以看成是一种特殊的文件内容. Subversion预定义了若干个附加属性, 这里只讨论“svn:needs-lock”属性, 因为它与我们上面的文件锁定会产生的一个问题有关. 其他的属性可以参考Subversion自带的帮助文档. 考虑这种情况, 张三和李四同时想对一个图片文件a.jpg作修改, 张三在修改时先将该文件锁定,然后进行修改, 同时李四也开始对该文件进行修改, 但李四忘记了对非文本文件进行修改时应该先锁定该文件. 张三首先对该文件修改完毕,于是张三向服务器提交了他的修改. 之后,李四也完成了修改,当他提交修改时, Subversion提示李四的文件版本不是最新的, 在Commit之前应先更新a.jpg到最新版本, 由于图片文件无法合并, 这就意味着张三和李四之间必定有一个人的修改会作废. 应用“svn:needs-lock”属性可以避免这个问题. 当一个文件拥有“svn:needs-lock”属性时, 该文件在没有锁定时,文件的图标是灰色的, 表示该文件是一个只读文件(该文件的Windows只读属性的复选框为选中), 这个灰色的图标就会提醒想对该文件进行修改的人, 在修改该文件之前应该首先锁定该文件. 锁定该文件之后,文件的只读属性就会去掉了, 一旦释放掉锁,文件的图标又会变成灰色, 文件也会变成只读的了. 李四在这种情况下就会避免在没有锁定文件时对文件进行修改. 对非文本文件添加“svn:needs-lock” 属性应该在将该文件第一次添加到Repository时就设置, 当然,一个文件可以在任意时刻添加附加属性, 这样做是为了减少李四所遇到的那个问题发生的几率. 具体的方法是: 首先将a.jpg文件拷贝到Working Copy中, 然后在该文件上单击右键, TortoiseSVN->Add,告诉Subversion要将该文件纳入版本控制, 接着在该文件上单击右键并选中属性, 在弹出的属性对话框中选中Subversion页. 在下拉框中选中“svn:needs-lock”, 并在下面的文本框中填入“*” (其实这里填什么都无所谓,只要文件有“svn:needs-lock”附加属性就行), 之后点Set按钮,svn:needs-lock”附加属性就设置好了. 然后执行Commit命令提交修改. 这时当其他人执行Update时, a.jpg就会添加到他们的Working Copy中, 并且文件的附加属性也会随文件一起被得到. 可以看到a.jpg此时的图标就是灰色的, 文件的Windows属性也是只读的.
12.回到以前的版本
由于Subversion会记录你对Repository的每一次修改, 因此能够很容易的获得Repository以前某一时刻的状态. 比如:现在Repository的最新Revision是56, 这时我想看看Repository在Revision24时的状态, 可以在本地的Working Copy中单击右键, TortoiseSVN->Update to Revision..., 然后输入你想要回复到的Revision号,点OK按钮.
回到以前的版本还有一种情况是我想将Repository的 最新Revision的状态与以前某一个Revision的状态一模一样, 上面那种方法就不适合, 上面的那种方法只是将本地的Working Copy回复到以前的状态, 而服务器端的Repository并没有回到以前的状态. 将Repository的最新Revison的状态回复到以前某个Revision的状态具体的方法是: 先执行Update命令将Working Copy更新到最新的Revision, 然后在Working Copy中单击右键, TortoiseSVN->Show Log, 弹出的Log Messages窗口中会显示该Repository的所有Revision, 选中最新的Revision,之后按住Shift键, 再单击你想回复到的Revision+1的那个Revision (比如Repository的最新Revision是30, 你想将Repository的状态回复到Revision16, 那么就选中Revision30,再按住Shift键, 选中Revision17, 就是说选中Revision17到Revision30之间的所有Revision). 然后在选中的Revision上单击右键, 选中“Revert changes from these revision”. 再点Yes按钮,就可以将Working Copy的状态回复到目标Revision. 注意,此时只是Working Copy回复到目标Revision, 之后应该用Commit提交修改, 这样Repository最新状态就与目标Revision的状态一样了.
这两种回复到以前版本的方式截然不同, 第一种方式是将整个Working Copy回复到某个Revision, 也就是说这种方式Working Copy中的“.svn”目录所存的文件副本也与目标Revision的一模一样, 如果这时你没有修改文件,你将不能执行Commit命令. 而第二种方式客户端Working Copy中的 “.svn”目录所存的副本始终是最新的Revision的文件副本 (这里我们基于一个假设:在Update之后没有其他人对Repository做修改). 这种方式就像是我们自己手工将Working Copy的文件状态修改为目标Revision, 在修改之后提交修改一样.
13.查看修改
有时我们对Working Copy的许多文件进行了修改, 这些文件位于不同的子目录,我们就可以在Working Copy的最上层目录单击右键, TortoiseSVN->Check For Modifications, 弹出的对话框就会显示你所做的所有修改明细.
还有一种情况是我们的Working Copy已经很久没有执行Update命令, 我们想看看Working Copy中有哪些文件已经发生修改了, 这时就可以在Working Copy的最上层目录单击右键, TortoiseSVN->Check For Modifications, 在弹出的对话框点击Check Repository按钮后, 就会显示服务器端已经修改了的文件. 该方法还有一个用途就是查看文件的锁定, 当你想锁定一个文件时,你想先看看这个文件有没有被别人锁定, 点击Check Repository按钮会显示服务器端Repository所有被锁定的文件, 如果你想锁定的文件不在这里面,那就说明该文件目前没有人锁定.
为您推荐:
其他类似问题
扫描下载二维码IntelliJ IDEA 下的版本控制介绍
这一章节放在这么靠前位置来讲是因为版本控制在我心目中的地位比后面的实战知识点都来得重要。不管是个人开发或是团队开发,版本控制都是可以很好地被使用的,目前我找不到任何开发者不使用版本控制的理由。而且对于 IDE 来讲,集成版本控制的本身就是它最大的亮点之一,很多开发者也是为此而使用它。
在本章节中也会对 IntelliJ IDEA 的相关版本控制进行了介绍,会开始涉及到一些 IntelliJ IDEA 人性化设置,也希望你能从这一讲开始认识到 IntelliJ IDEA 的优雅。
很多人认为 IntelliJ IDEA 自带了 SVN 或是 Git 等版本控制工具,认为只要安装了 IntelliJ IDEA 就可以完全使用版本控制应有的功能。这完全是一种错误的解读,IntelliJ IDEA 是自带对这些版本控制工具的支持插件,但是该装什么版本控制客户端还是要照样装的。
如上图标注 1 所示,IntelliJ IDEA 对版本控制的支持是以插件化的方式来实现的。旗舰版默认支持目前主流的版本控制软件:CVS、Subversion(SVN)、Git、ClearCase、Mercurial、Perforce、TFS。又因为目前太多人使用 Github 进行协同或是项目版本管理,所以 IntelliJ IDEA 同时自带了 Github 插件,方便 Checkout 和管理你的 Github 项目。
SVN 的配置
要在 IntelliJ IDEA 中使用 SVN,需要先安装 SVN 客户端或是 TortoiseSVN 这类图形化工具,Windows 系统这里推荐安装 TortoiseSVN,即使在不使用 IntelliJ IDEA 也可以方便管理我们的项目。
SVN 主要使用的版本有 1.6、1.7、1.8,最新的是 1.9。推荐大家使用 1.8 的。如果你的项目使用的是 1.6 的版本,在安装 1.8 之后是可以直接对项目文件进行升级的,所以无需担心,也因此更加推荐大家使用 1.8。
Subversion 官网下载:
TortoiseSVN 官网下载:
如上图箭头所示,在安装 TortoiseSVN 的时候,默认 command line client tools,是不安装的,这里建议勾选上。
如上图标注 1 所示,勾选 Use command line client
如上图标注 2 所示,建议 svn 的路径自己根据安装后的路径进行选择,不然有时候 IntelliJ IDEA 无法识别到会报:Cannot run program &svn& 这类错误。
如上图标注 3 所示,当使用一段时间 SVN 以后,发现各种 SVN 相关问题无法解决,可以考虑点击此按钮进行清除一下缓存。
根据目前的使用经验来看,IntelliJ IDEA 下 SVN 的使用经历并不算愉快,至少比 Git 不好用很多,经常遇到很多问题,所以这里也算是先给大家提个醒。如果紧急情况下 IntelliJ IDEA 无法更新、提交的时候,要记得使用 TortoiseSVN 来操作。
Git 的配置
要在 IntelliJ IDEA 中使用 Git,需要先安装 Git 客户端,这里推荐安装官网版本。
Git 主要的版本有 1.X、2.X,最新的是 2.X,使用版本随意,但是不要太新了,不然可能 IntelliJ IDEA 小旧版本会无法支持可能。
Git 官网下载:
TortoiseGit 官网下载:
如上图标注 1 所示,确定好该路径下是否有对应的可执行文件。
Github 的配置和使用
如上图标注 1 所示,填写你的 Github 登录账号和密码,点击 Test 可以进行测试是否可以正确连上。
如上图标注 1 所示,支持直接从你当前登录的 Github 账号上 Checkout 项目。
如上图标注 1 所示,支持把当前本地项目分享到你的 Github 账号上。
如上图标注 1 所示,支持创建 Gist。Github 的 Gist 官网地址:
版本控制主要操作按钮
如上图标注 1 所示,对目录进行右键弹出的菜单选项。
如上图标注 1 所示,对文件进行右键弹出的菜单选项。
如上图标注红圈所示,为工具栏上版本控制操作按钮,基本上大家也都是使用这里进行操作。
第一个按钮:Update Project 更新项目。
第二个按钮:Commit changes 提交项目上所有变化文件。点击这个按钮不会立马提交所有文件,而是先弹出一个被修改文件的一个汇总框,具体操作下面会有图片进行专门介绍。
第三个按钮:Compare with the Same Repository Version 当前文件与服务器上该文件通版本的内容进行比较。如果当前编辑的文件没有修改,则是灰色不可点击。
第四个按钮:Show history 显示当前文件的历史记录。
第五个按钮:Revert 还原当前被修改的文件到违背修改的版本状态下。如果当前编辑的文件没有修改,则是灰色不可点击。
如上图标注 1 所示,菜单栏上的版本控制操作区。
版本控制相关的常用设置说明
如上图标注 1 所示,当前项目使用的版本控制是 Git。如果你不愿意这个项目继续使用版本控制可以点击旁边的减号按钮,如果你要切换版本控制,可以点击 Git,会出现 IntelliJ IDEA 支持的各种版本控制选择列表,但是我们一般情况下一个项目不会有多个版本控制的。
如上图标注 2 所示,Show directories with changed descendants 表示子目录有文件被修改了,则该文件的所有上层目录都显示版本控制被概念的颜色。默认是不勾选的,我一般建议勾选此功能。
如上图标注 1 所示,When files are created 表示当有新文件放进项目中的时候 IntelliJ IDEA 做如何处理,默认是 Show options before adding to version control 表示弹出提示选项,让开发者决定这些新文件是加入到版本控制中还是不加入。如果不想弹出提示,则选择下面两个选项进行默认操作。
如上图标注 2 所示,When files are deleted 表示当有新文件在项目中被删除的时候 IntelliJ IDEA 做如何处理,默认是 Show options before removing from version control 表示弹出提示选项,让开发者决定这些被删除的是否从版本控制中删除。如果不想弹出提示,则选择下面两个选项进行默认操作。
如上图标注 1 所示,对于不想加入到版本控制的文件,可以添加要此忽略的列表中。但是如果已经加入到版本控制的文件使用此功能,则表示该文件 或 目录无法再使用版本控制相关的操作,比如提交、更新等。我个人使用过程中发现在 SVN 上此功能不太好用,Git 上是可以用的。
上图所示的弹出层就是本文上面说的 Commit Changes 点击后弹出的变动文件汇总弹出层。
如上图标注 1 所示,可以在文件上右键进行操作。
Show Diff 当前文件与服务器上该文件通版本的内容进行比较。
Move to Another Changelist 将选中的文件转移到其他的 Change list 中。Change list 是一个重要的概念,这里需要进行重点说明。很多时候,我们开发一个项目同时并发的任务可能有很多,每个任务涉及到的文件可能都是基于业务来讲的。所以就会存在一个这样的情况:我改了 30 个文件,其中 15 个文件是属于订单问题,剩下 15 个是会员问题,那我希望提交代码的时候是根据业务区分这些文件的,这样我填写 Commit Message 是好描述的,同时在文件多的情况下,我也好区分这些要提交的文件业务模块。所以我一般会把属于订单的 15 个文件转移到其他的 Change list中,先把专注点集中在 15 个会员问题的文件,先提交会员问题的 Change list,然后在提交订单会员的 Change list。我个人还有一种用法是把一些文件暂时不提交的文件转移到一个我指定的 Change list,等后面我觉得有必要提交了,再做提交操作,这样这些文件就不会干扰我当前修改的文件提交。总结下 Change list 的功能就是为了让你更好地管理你的版本控制文件,让你的专注点得到更好的集中,从而提供效率。
Jump to Source 打开并跳转到被选中。
如上图标注 2 所示,可以根据工具栏按钮进行操作,操作的对象会鼠标选中的文件,多选可以按 Ctrl 后不放,需要注意的是这个更前面的复选框是没有多大关系的。
如上图标注 3 所示,可以在提交前自动对被提交的文件进行一些操作事件(该项目使用的 Git,使用其他版本控制可能有些按钮有差异。):
Reformat code 格式化代码,如果是 Web 开发建议不要勾选,因为格式化 JSP 类文件,格式化效果不好。如果都是 Java 类则可以安心格式化。
Rearrange code 重新编排代码,IntelliJ IDEA 支持各种复杂的编排设置选项,这个会在后面说。设置好了编码功能之后,这里就可以尝试勾选这个进行自动编排。
Optimize imports 优化导入包,会在自动去掉没有使用的包。这个建议都勾选,这个只对 Java 类有作用,所以不用担心有副作用。
Perform code analysis 进行代码分析,这个建议不用在提交的时候处理,而是在开发完之后,要专门养成对代码进行分析的习惯。IntelliJ IDEA 集成了代码分析功能。
Check TODO 检查代码中的 TODO。TODO 功能后面也会有章节进行讲解,这里简单介绍:这是一个记录待办事项的功能。
Cleanup 清除下版本控制系统,去掉一些版本控制系统的错误信息,建议勾选。
如上图标注 4 所示,填写提交的信息。
如上图标注 5 所示,Change list 改变列表,这是一个下拉选项,说明我们可以切换不同的 Change list,提交不同的 Change list 文件。
如上图标注箭头所示,我们可以查看我们提交历史中使用的 Commit Message,有些时候,我们做得是同一个任务,但是需要提交多次,为了更好管理项目,建议是提交的 Message 是保持一致的。
如上图标注箭头所示,如果你使用的 Git,点击此位置可以切换分支和创建分支,以及合并、删除分支等操作。
Copyright &
All Rights Reserved &&&&&&}

我要回帖

更多关于 本地文档管理系统 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信