svn冲突在idea里怎么解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了svn冲突在idea里怎么解决相关的知识,希望对你有一定的参考价值。

参考技术A 树冲突通常是当一名开发人员移动、重命名、删除一个文件或文件夹,而另一名开发人员也对它们进行了移动、重命名、删除或者仅仅是修改时就会发生树冲突。(从我个人使用中理解就是两个人分别检出了一个同源的文件,这个文件被一个人进行了移动、重命名、删除这类操作并提交了,那么另一个人在没有update的情况下,也对该文件进行了修改、移动、重命名、删除等这类操作进行更新或者提交时就会出现树冲突。)
解决树冲突的方式需要发现冲突的一方,查看log日志获知自己的冲突文件被谁做过什么样的操作,然后与之沟通进行解决即可。

SVN的安装和介绍以及SVN的配置和使用(包含IDEA集成SVNSVN解决版本冲突问题)

文章目录

1. SVN介绍


1.1 SVN简介

SVN的全称是Subversion,即版本控制系统。它是一个开放源代码的版本控制系统。作为一个开源的版本控制系统,Subversion管理着随时间改变的数据。这些数据放置在一个中央资料档案库(Repository)中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样就可以把档案恢复到旧的版本,或是浏览文件的变动历史。Subversion是一个通用的系统,可用来管理任何类型的文件,其中包括程序源码。


1.2 SVN主要作用

  1. 目录版本控制:Subversion实现了一个虚拟的版本控管文件系统,能够依时间跟踪整个目录的变动。目录和文件都能进行版本控制。
  2. 真实的版本历史:Subversion中,可以增加(add)、删除((delete)、复制(copy)和重命名(rename),无论是文件还是目录。所有的新加的文件都从一个新的、干净的版本开始。
  3. 自动提交:一个提交动作,不是全部更新到了档案库中,就是完全不更新。这允许开发人员以逻辑区间建立并提交变动,以防止当部分提交成功时出现的问题。

1.3 基本概念

  • Repository (源代码库)︰源代码统一存放的地方。
  • Checkout(提取):当你手上没有源代码的时候,你需要从repository checkout一份。
  • Commit(提交):当你已经修改了代码,你就需要Commit到repository。
  • Update (更新):当你已经Checkout了一份源代码,Update后就可以和Repository上的源代码同步。

1.4 工作流程

  1. 从服务器下载项目组最新代码。(Checkout)
  2. 如果已经Checkout并且有人已Commit了代码,你可以更新以获得最新代码。(Update)
  3. 下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。(Commit)

注意: 如果两个程序员同时修改了同一个文件,SVN可以合并这两个程序员的改动,实际上SVN管理源代码是以行为单位的,就是说两个程序员只要不是修改了同一行程序,SVN都会自动合并两种修改。如果是同一行,SVN会提示文件Confict冲突,需要手动确认。

工作流程图:


1.5 生命周期


1.5.1 创建版本库(Create)

版本库相当于一个集中的空间,用于存放开发者所有的工作成果。版本库不仅能存放文件,还包括了每次修改的历史,即每个文件的变动历史。

Create操作是用来创建一个新的版本库。大多数情况下这个操作只会执行一次。当你创建一个新的版本库的时候,你的版本控制系统会让你提供一些信息来标识版本库,例如创建的位置和版本库的名字。


1.5.2 检出(Checkout)

Checkout操作是用来从版本库创建一个工作副本。工作副本是开发者私人的工作空间,可以进行内容的修改,然后提交到版本库中。


1.5.3 更新(update)

顾名思义,update操作是用来更新版本库的。这个操作将工作副本与版本库进行同步。


1.5.4 执行变更

当检出之后,你就可以做很多操作来执行变更。编辑是最常用的操作。你可以编辑已存在的文件来,例如进行文件的添加/删除操作。

你可以添加文件/目录。但是这些添加的文件目录不会立刻成为版本库的一部分,而是被添加进待变更列表中,直到执行了commit 操作后才会成为版本库的一部分。

同样地你可以删除文件/目录。删除操作立刻将文件从工作副本中删除掉,但该文件的实际删除只是被添加到了待变更列表中,直到执行了commit操作后才会真正删除。

Rename操作可以更改文件/目录的名字。“移动” 操作用来将文件/目录从一处移动到版本库中的另一处。


1.5.5 复查变化(Status)

当你检出工作副本或者更新工作副本后,你的工作副本就跟版本库完全同步了。但是当你对工作副本进行一些修改之后,你的工作副本会比版本库要新。在commit操作之前复查下你的修改是一个很好的习惯。

Status操作列出了工作副本中所进行的变动。正如我们之前提到的,你对工作副本的任何改动都会成为待变更列表的一部分。Status操作就是用来查看这个待变更列表。

Status操作只是提供了一个变动列表,但并不提供变动的详细信息。你可以用diff操作来查看这些变动的详细信息。


1.5.6 修复错误(revert )

我们来假设你对工作副本做了许多修改,但是现在你不想要这些修改了,这时候revert 操作将会帮助你。Revert操作重置了对工作副本的修改。它可以重置一个或多个文件/目录。当然它也可以重置整个工作副本。在这种情况下,revert操作将会销毁待变更列表并将工作副本恢复到原始状态。


1.5.7 解决冲突

合并的时候可能会发生冲突。Merge操作会自动处理可以安全合并的东西。其它的会被当做冲突。例如,"hello.c"文件在一个分支上被修改,在另一个分支上被删除了。这种情况就需要人为处理。Resolve操作就是用来帮助用户找出冲突并告诉版本库如何处理这些冲突。


1.5.8 提交更改

Commit操作是用来将更改从工作副本到版本库。这个操作会修改版本库的内容,其它开发者可以通过更新他们的工作副本来查看这些修改。

在提交之前,你必须将文件/目录添加到待变更列表中。列表中记录了将会被提交的改动。当提交的时候,我们通常会提供一个注释来说明为什么会进行这些改动。这个注释也会成为版本库历史记录的一部分。Commit是一个原子操作,也就是说要么完全提交成功,要么失败回滚。用户不会看到成功提交一半的情况。


2. SVN的安装和配置

2.1 SVN的安装

服务端是用来放置仓库的,客户端是用来操作仓库的(提交/更新仓库等等操作)。


2.1.1 服务端的安装

(1)下载服务端 https://www.visualsvn.com/downloads/

(2)双击服务端安装程序

(3)点击Next

(4)勾选复选框选择同意,然后选择Next

(5)点击Next

(6)配置一下,然后点击Next

(7)点击Next

(8)点击Install进行安装

(9)点击Finish

出现以下画面代表安装成功:


2.1.2 客户端的安装

(1)下载客户端:https://tortoisesvn.net/downloads.html
(2)双击下载好的安装包

(3)点击Next

(4)安装客户端工具(集成到IDE里面需要)

(5)点击Finish

(6)重启让配置生效

(7)在任意空白地方,右键,出现如下内容,则表示安装成功


2.2 SVN的配置

说明:服务器端需要提供IP、端口、帐号、密码供客户端使用。即有如下配置。


2.2.1 设置IP和端口号

(1)打开服务器,点击VisualSVN Server,选择Configure authentication options…

(2)设置Server name,建议使用当前IP


2.2.2 新建账号密码

(1)右键左侧菜单User,选择Create User

(2)填写账号密码,点击OK

(3)使用账户去访问仓库

成功访问到仓库


2.2.3 新建分组

(1)右键左侧菜单Group,选择Create Group

演示:新建Boys分组,然后把codejiao用户添加到boys分组


3. SVN的使用


3.1 新建版本库

(1)选择Repositories右键,选择Create New Repository…

(2)选择默认设置,选择下一步,设置仓库名称



(3)设置仓库目录(选择任意一个选项都可)

(4)设置仓库的访问权限(这里设置所有svn用户都有读/写权限)

(5)点击Create,仓库就创建完成



(6)访问新建的版本库


3.2 签入项目到SVN (import)

(1)拷贝远程仓库的地址,一般把项目放在trunk目录

(2)选择任意项目,右键选择TortoiseSVN,选择import


(3)将上一步拷贝的仓库地址粘贴到地址栏,然后点击OK

(4)选择永久接收,然后输入账号密码,然后点击OK



(5)访问刚刚导入的项目


3.3 检索(拉取)项目(check out)

(1)复制要下载的项目的远程地址

(2)在需要检索项目的目录中,右键选择SVN Checkout…

(3)输入远程地址,设置项目的存放位置,然后点击OK



3.4 提交代码(commit)

(1)新建文件,右键选择TortoiseSVN,选择Add,将文件添加到版本库列表






3.5 更新代码(update)

(1)如果当前资源不是最新版本,则可在项目中空白地方右键,选择SVN Update


4. 解决版本(代码)冲突


1.1 冲突发生的原因

假设A、B两个用户都在版本号为100的时候,更新了kingtuns.txt这个文件,A用户在修改完成之后提交kingtuns.txt到服务器,这个时候提交成功,这个时候kingtuns.txt文件的版本号已经变成101了。同时B用户在版本号为100的kingtuns.txt文件上作修改,修改完成之后提交到服务器时,由于不是在当前最新的101版本上作的修改,所以导致提交失败。此时用户B去更新文件,如果B用户和A用户修改了文件的同一行代码,就会出现冲突


1.2 解决冲突


1.2.1 模拟冲突发生的场景

(1)现在A、B两个用户都更新项目文件到本地。


(2)项目中的hello.txt文件原始内容为:

(3)用户A和B都对hello.txt做修改

(4)我们先让A用户进行提交,然后用B用户也进行提交。
B用户提交的时候就报了错误


1.2.2 解决冲突


尽量不要用自己的代码直接覆盖别人的代码,如果确实需要覆盖,则应该和对方协商好。

我们这里把A和B的代码都加进来

说明:

修改完成后,选择"Mark as resolved"(标记为解决),然后选择"Save”(保存文件),关闭窗口即可

此时,当前冲突已解决,可再次选择"SVN Commit"提交文件


1.3 如何降低冲突发生概率

  1. 当文档编辑完成后,尽快提交,频繁的提交/更新可以降低在冲突发生的概率,以及发生时解决冲突的复杂度。
  2. 在提交时,写上明确的message,方便以后查找用户更新的原因,毕竟随着时间的推移,对当初更新的原因有可能会遗忘。
  3. 养成良好的使用习惯,使用SVN时每次都是先提交,后更新。每天早上打开后,首先要从版本库获取最新版本。每天下班前必须将已经编辑过的文档都提交到版本库。

5. IDEA集成使用VPN


5.1 配置SVN环境

(1)进入全局配置

(2)配置SVN

(3)重启IDEA


5.2 检索项目(创建项目)

(1)选择Get from VCS

(2)选择项目要存放的位置
(3)点击OK
(4)点击Cancel


5.3 提交代码

(1)选择VCS-> Compmit…

(2)选择需要提交的文件,填写提交信息,选择Commit



5.4 更新代码

(1)选择VCS->Update Project…
(2)点击OK


5.5 导入项目(将项目上传到服务器)

(1)选择VCS—> lmport into Version Control —> lmport into Subversion

(2)选择"+"添加项目导入的地址(可手动添加一个文件夹,项目中的文件会放置在该文件夹中,文件名自定义)。

(3)选择要导入的路径,选择lmport

(4)选择要导入的项目,点击OK、

(5)检查导入的路径,填写导入信息,选择OK

(6)在远程仓库中检查是否导入成功即可。


5.6 版本冲突问题

(1)如果未更新,就提交资源(有其他用户也提交过资源),则提交失败


(2)此时,执行更新操作,将其他人提交过的资源更新到本地,会提示冲突

(3)通常选择合并,再选择需要保留的代码,选择好之后选择Apply

(4)提示更新成功。

(5)再次选择提交,成功解决冲突



以上是关于svn冲突在idea里怎么解决的主要内容,如果未能解决你的问题,请参考以下文章

eclipse的PATH环境配置与ping的PATH环境配置有冲突,怎么解决,紧急!!!

svn:IDEA与SVN(IDEA删除检出更新项目解决冲突恢复历史版本)

svn 更新代码冲突 怎么编辑冲突代码 解决

Eclipse中git冲突怎么解决

svn 命令行怎么解决冲突

svn有冲突怎么解决