Maven&SVN

Maven

  1. 主要内容
  2. Maven的简介
    2.1. 简介
    Maven【[ˈmevən]】这个词可以翻译为"专家",“内⾏”。 作为Apache组织中的⼀个颇为成功的开源项
    ⽬,Maven主要服务于基于java平台的项⽬构建,依赖管理和项⽬信息管理。
    ⽆论是⼩型的开源类库项⽬,还是⼤型的企业级应⽤; ⽆论是传统的瀑布式开发,还是流⾏的敏捷开
    发,Maven都能⼤显身⼿。
    2.2. 项⽬构建
    不管你是否意识到,构建(build)是每⼀位程序员每天都在做的⼯作。早上来到公司,我们做的第⼀
    件事就是从源码库签出最新的代码,然后进⾏单元测试,如果测试失败,会找相关的同事⼀起调试,修
    复错误代码。 接着回到⾃⼰的⼯作上来,编写⾃⼰的单元测试及产品代码。
    仔细总结⼀下,我们会发现,除了编写源代码,我们每天有相当⼀部分时间花在了编译,运⾏单元测
    试,⽣成⽂档,打包和部署等繁琐且不起眼的⼯作上,这就是构建。 如果我们现在还⼿⼯这样做,那成
    本也太⾼了,于是有⼈⽤软件的⽅法让这⼀系列⼯作完全⾃动化,使得软件的构建可以像全⾃动流⽔线
    ⼀样,只需要⼀条简单的命令,所有繁琐的步骤都能够⾃动完成,很快就能得到最终结果。
    2.3. 项⽬构建⼯具
    Ant构建
    最早的构建⼯具,基于IDE, ⼤概是2000年有的,当时是最流⾏java构建⼯具,不过它的XML脚本编写
    格式让XML⽂件特别⼤。对⼯程构建过程中的过程控制特别好
    Maven【JAVA】
    项⽬对象模型,通过其描述信息来管理项⽬的构建,报告和⽂档的软件项⽬管理⼯具。它填补了Ant
    缺点,Maven第⼀次⽀持了从⽹络上下载的功能,仍然采⽤xml作为配置⽂件格式。Maven专注的是依
    赖管理,使⽤Java编写。
    Gradle
    属于结合以上两个的优点,它继承了Ant的灵活和Maven的⽣命周期管理,它最后被google作为了
    Android御⽤管理⼯具。它最⼤的区别是不⽤XML作为配置⽂件格式,采⽤了DSL格式,使得脚本更加
    简洁。
    ⽬前市⾯上Ant⽐较⽼, 所以⼀般是⼀些⽐较传统的软件企业公司使⽤, Maven使⽤Java编写, 是当下⼤
    多数互联⽹公司会使⽤的⼀个构建⼯具, 中⽂⽂档也⽐较⻬全, gradle是⽤groovy编写, ⽬前⽐较新型的
    构建⼯具⼀些初创互联⽹公司会使⽤, 以后会有很⼤的使⽤空间. 2.4. Maven的四⼤特性
    2.4.1. 依赖管理系统
    Maven为Java世界引⼊了⼀个新的依赖管理系统jar包管理 jar 升级时修改配置⽂件即可。在Java世界
    中,可以⽤groupId、artifactId、version组成的Coordination(坐标)唯⼀标识⼀个依赖。
    任何基于Maven构建的项⽬⾃身也必须定义这三项属性,⽣成的包可以是Jar包,也可以是war包或者
    jar包。⼀个典型的依赖引⽤如下所示:
    坐标属性的理解
    Maven坐标为各种组件引⼊了秩序,任何⼀个组件都必须明确定义⾃⼰的坐标。
    groupId

    javax.servlet com.baidu
    javax.servlet-api ueditor echarts
    3.1.0

    定义当前Maven项⽬⾪属的实际项⽬-公司名称。(jar包所在仓库路径) 由于Maven中模块的概念,
    因此⼀个实际项⽬往往会被划分为很多模块。 ⽐如spring是⼀个实际项⽬,其对应的Maven模块会有很
    多,如spring-core,spring-webmvc等。
    artifactId
    该元素定义实际项⽬中的⼀个Maven模块-项⽬名, 推荐的做法是使⽤实际项⽬名称作为artifactId的
    前缀。 ⽐如: spring-bean, spring-webmvc等。
    version
    该元素定义Maven项⽬当前所处的版本。
    2.4.2. 多模块构建
    项⽬复查时 dao service controller 层分离将⼀个项⽬分解为多个模块已经是很通⽤的⼀种⽅式。
    在Maven中需要定义⼀个parent POM作为⼀组module的聚合POM。在该POM中可以使⽤ 标签来
    定义⼀组⼦模块。parent POM不会有什么实际构建产出。⽽parent POM中的build配置以及依赖配置
    都会⾃动继承给⼦module。 2.4.3. ⼀致的项⽬结构
    Ant时代⼤家创建Java项⽬⽬录时⽐较随意,然后通过Ant配置指定哪些属于source,那些属于
    testSource等。⽽Maven在设计之初的理念就是Conversion over configuration(约定⼤于配置)。其
    制定了⼀套项⽬⽬录结构作为标准的Java项⽬结构,解决不同ide 带来的⽂件⽬录不⼀致问题。
    2.4.4. ⼀致的构建模型和插件机制
  3. Maven的安装配置和⽬录结构
    3.1. Maven的安装配置
    3.1.1. 检查JDK的版本

    org.mortbay.jetty
    maven-jetty-plugin
    6.1.25

    10
    /test


    JDK版本1.7及以上版本
    3.1.2. 下载Maven
    下载地址:http://maven.apache.org/download.html
    3.1.3. 配置Maven环境变量
    解压后把Maven的根⽬录配置到系统环境变量中MAVEN_HOME,将bin⽬录配置到path变量中。
    注:maven解压后存放的⽬录不要包含中⽂和空格
    3.1.4. 检查Maven是否安装成功
    打开dos窗⼝,执⾏ mvn -v
    3.2. 认识Maven⽬录结构
    Maven项⽬⽬录结构
    任务:⼿动创建⼀个Maven项⽬,并编译运⾏成功!
    3.2.1. 创建⼀个⽂件夹作为项⽬的根⽬录
    在根⽬录中创建⼀个pom.xml⽂件,内容如下
    Ps:标签定义解释

4.0.0
com.xxxx
maven01
0.0.1-SNAPSHOT
jar
maven01
http://maven.apache.org

UTF-8



junit
junit
3.8.1
test

根⽬录下的第⼀个⼦元素 ModelVersion指定当前Pom模型的版本,对于Maven3来说,它只能是4.0.0 。指定了当前Maven模型的版本号,对于Maven2和Maven3来说,它只能是4.0.0 groupId定义了项⽬属于哪个组, 这个组往往和项⽬所在的组织和公司存在关联。 ⽐如: com.xxxx artifactId 定义了当前Maven项⽬在组中唯⼀的ID。 Version X.X.X-⾥程碑 ⽐如:1.0.0-SNAPSHOT 第⼀个X ⼤版本 有重⼤变⾰ 第⼆个X ⼩版本 修复bug,增加功能 3.2.2. 编写主函数 3.2.3. cmd 下编译并运⾏ cmd下⾯,进⼊项⽬的根⽬录 1. 编译java⽂件 mvn compile 2. 执⾏main ⽅法 mvn exec:java -Dexec.mainClass="com.xxxx.demo.Hello" 注:第⼀次下载会⽐较慢,要修改maven解压之后的conf⽬录下的settings.xml。 第三个X 更新 ⾥程碑版本: SNAPSHOT (快照,开发版) alpha(内部测试) beta(公开测试) Release | RC( 发布版) GA(正常版本) 使⽤name标签声明⼀个对于⽤户更为友好的项⽬名称,虽然不是必须的,但还是推荐为每个Pom声明 name,以⽅便信息交流。 package com.xxxx.demo; public class Hello{ public static void main(String[] args) { System.out.println("hello maven"); } } 如果编译不成功,可能出现的问题 3. Maven命令 作为开发利器的maven,为我们提供了⼗分丰富的命令,了解maven的命令⾏操作并熟练运⽤常⻅的 maven命令还是⼗分必要的,即使譬如IDEA等⼯具给我提供了图形界⾯化⼯具,但其底层还是依靠 maven命令来驱动的。 Maven的命令格式如下: 命令代表的含义:执⾏ plugin-name 插件的 goal-name ⽬标 4.1. 常⽤命令 1.1.修改默认仓库位置 打开maven⽬录 -> conf -> settings.xml 添加仓库位置配置 F:/m2/repository 注:仓库位置改为⾃⼰本机的指定⽬录,"/"不要写反 1.2.更换阿⾥镜像,加快依赖下载 nexus-aliyun central Nexus aliyun http://maven.aliyun.com/nexus/content/groups/public 4. 不是使⽤管理员权限执⾏dos命令 5. JDK环境配置有问题,重装JDK 6. 代码编写时,类⾥⾯没设置包名(如果编译时类没加包名,执⾏时也不需要加包名) mvn [plugin-name]:[goal-name] 命令 描述 mvn –version 显示版本信息 mvn clean 清理项⽬⽣产的临时⽂件,⼀般是模块下的target⽬录 mvn compile 编译源代码,⼀般编译模块下的src/main/java⽬录 mvn package 项⽬打包⼯具,会在模块下的target⽬录⽣成jar或war等⽂件 mvn test 测试命令,或执⾏src/test/java/下junit的测试⽤例. mvn install 将打包的jar/war⽂件复制到你的本地仓库中,供其他模块使⽤ mvn deploy 将打包的⽂件发布到远程参考,提供其他⼈员进⾏下载依赖 mvn site ⽣成项⽬相关信息的⽹站 mvn eclipse:eclipse 将项⽬转化为Eclipse项⽬ mvn dependency:tree 打印出项⽬的整个依赖树 mvn archetype:generate 创建Maven的普通java项⽬ mvn tomcat7:run 在tomcat容器中运⾏web应⽤ mvn jetty:run 调⽤ Jetty 插件的 Run ⽬标在 Jetty Servlet 容器中启动 web 应⽤ 4.2. 命令参数 上⾯列举的只是⽐较通⽤的命令,其实很多命令都可以携带参数以执⾏更精准的任务。 4.2.1. -D 传⼊属性参数 例如: mvn package -Dmaven.test.skip=true 以 -D 开头,将 maven.test.skip 的值设为 true ,就是告诉maven打包的时候跳过单元测试。同 理, mvn deploy-Dmaven.test.skip=true 代表部署项⽬并跳过单元测试。 4.2.2. -P 使⽤指定的Profile配置 ⽐如项⽬开发需要有多个环境,⼀般为开发,测试,预发,正式4个环境,在pom.xml中的配置如 下: 注意:运⾏maven命令的时候,⾸先需要定位到maven项⽬的⽬录,也就是项⽬的pom.xml⽂件所在的⽬ 录。否则,必以通过参数来指定项⽬的⽬录。 dev dev true qa qa pre pre prod prod ...... config/${env}.properties src/main/resources true ...... profiles 定义了各个环境的变量 id , filters 中定义了变量配置⽂件的地址,其中地址中的环境 变量就是上⾯ profile 中定义的值, resources 中是定义哪些⽬录下的⽂件会被配置⽂件中定义的变 量替换。 通过maven可以实现按不同环境进⾏打包部署,例如: mvn package -Pdev -Dmaven.test.skip=true 表示打包本地环境,并跳过单元测试 7. IDEA编辑器集成Maven环境 5.1. 设置Maven版本 选择 "File" —> "Other Settings" —> "Settings for New Projects..." —> 搜索 "Maven" 选择下载好的maven版本(⽬录选到bin⽬录的上⼀级⽬录) 设置settings.xml⽂件 设置好之后,选择 "Apply" 或者 "OK" 8. Maven项⽬的创建 6.1. 创建 Java项⽬ 6.1.1. 新建项⽬ 9. 选择 "File" —> "New" —> "Project" 10. 选择"Maven",设置JDK版本,选择maven项⽬的模板 11. 设置项⽬的 GroupId 和 ArtifactId 12. 检查Maven环境,选择 "Next" 13. 检查项⽬名和⼯作空间,选择 "Finish" 14. 等待项⽬创建,下载资源,创建完成后⽬录结构如下 注:右下⻆弹出的提示框,选择 "Enable Auto-Import"(Maven启动⾃动导⼊) 6.1.2. 编译项⽬ 15. 点击右上⻆的 "Add Configurations ",打开 "Run/Debug Configurations" 窗⼝ 16. 点击左上⻆的 "+" 号,选择 "Maven" 17. 设置编译项⽬的命令 18. 执⾏编译命令,两个图标分别代表"普通模式"和"调试模式" 19. 编译成功 6.2. 创建 Web项⽬ 6.2.1. 创建项⽬ 20. 创建Web项⽬与创建Java项⽬步骤基本⼀致,区别在于选择 Maven模板(web项⽬选择 webapp),如图: 注:其他步骤与创建普通的Java项⽬相同。 21. 项⽬⽬录结构如下: 6.2.2. 启动项⽬ 6.2.2.1. 修改 JDK 的版本

SVN

  1. 主要内容
  2. SVN介绍
    2.1. 简介
    SVN全称Subversion,是⼀个开放源代码的版本控制系统,Subversion 在 2000 年由 CollabNet Inc
    开发,现在发展成为 Apache 软件基⾦会的⼀个项⽬,同样是⼀个丰富的开发者和⽤户社区的⼀部分。
    SVN是⼀个开放源代码的版本控制系统,管理着随时间改变的数据。这些数据放置在⼀个中央资料档
    案库(repository) 中。 这个档案库很像⼀个普通的⽂件服务器, 不过它会记住每⼀次⽂件的变动。 这样
    你就可以把档案恢复到旧的版本, 或是浏览⽂件的变动历史。说得简单⼀点SVN就是⽤于多个⼈共同开
    发同⼀个项⽬,共⽤资源的⽬的。 2.2. 主要作⽤
  3. ⽬录版本控制
    Subversion 实现了⼀个 “虚拟” 的版本控管⽂件系统, 能够依时间跟踪整个⽬录的变动。 ⽬录和⽂
    件都能进⾏版本控制。
  4. 真实的版本历史
    Subversion中,可以增加(add)、删除(delete)、复制(copy)和重命名(rename),⽆论
    是⽂件还是⽬录。所有的新加的⽂件都从⼀个新的、⼲净的版本开始。
  5. ⾃动提交
    ⼀个提交动作,不是全部更新到了档案库中,就是完全不更新。这允许开发⼈员以逻辑区间建⽴并
    提交变动,以防⽌当部分提交成功时出现的问题。
    … 2.3. 基本概念
    Repository(源代码库):源代码统⼀存放的地⽅
    Checkout(提取):当你⼿上没有源代码的时候,你需要从repository checkout⼀份
    Commit(提交):当你已经修改了代码,你就需要Commit到repository
    Update (更新):当你已经Checkout了⼀份源代码, Update后就可以和Repository上的源代码同
    步 2.4. ⼯作流程
    开始新⼀天的⼯作
    1、从服务器下载项⽬组最新代码。(Checkout) 2、如果已经Checkout并且有⼈已Commit了代码,你可以更新以获得最新代码。(Update) 3、进⼊⾃⼰的分⽀,进⾏⼯作,每隔⼀个⼩时向服务器⾃⼰的分⽀提交⼀次代码(很多⼈都有这个习
    惯。因为有时候⾃⼰对代码改来改去,最后⼜想还原到前⼀个⼩时的版本,或者看看前⼀个⼩时⾃⼰修
    改了哪些代码,就需要这样做了)。(Commit) 4、下班时间快到了,把⾃⼰的分⽀合并到服务器主分⽀上,⼀天的⼯作完成,并反映给服务器。
    (Commit)
    注意:如果两个程序员同时修改了同⼀个⽂件, SVN可以合并这两个程序员的改动,实际上SVN管理源
    代码是以⾏为单位的,就是说两个程序员只要不是修改了同⼀⾏程序,SVN都会⾃动合并两种修改。如
    果是同⼀⾏,SVN会提示⽂件Confict, 冲突,需要⼿动确认。
    2.5. ⽣命周期
    2.5.1. 创建版本库
    版本库相当于⼀个集中的空间,⽤于存放开发者所有的⼯作成果。版本库不仅能存放⽂件,还包括了
    每次修改的历史,即每个⽂件的变动历史。
    Create 操作是⽤来创建⼀个新的版本库。⼤多数情况下这个操作只会执⾏⼀次。当你创建⼀个新的版
    本库的时候,你的版本控制系统会让你提供⼀些信息来标识版本库,例如创建的位置和版本库的名字。
    2.5.2. 检出
    Checkout 操作是⽤来从版本库创建⼀个⼯作副本。⼯作副本是开发者私⼈的⼯作空间,可以进⾏内
    容的修改,然后提交到版本库中。
    2.5.3. 更新
    顾名思义,update 操作是⽤来更新版本库的。这个操作将⼯作副本与版本库进⾏同步。由于版本库
    是由整个团队共⽤的,当其他⼈提交了他们的改动之后,你的⼯作副本就会过期。
    让我们假设 Tom 和 Jerry 是⼀个项⽬的两个开发者。他们同时从版本库中检出了最新的版本并开始⼯
    作。此时,⼯作副本是与版本库完全同步的。然后,Jerry 很⾼效的完成了他的⼯作并提交了更改到版
    本库中。
    此时 Tom 的⼯作副本就过期了。更新操作将会从版本库中拉取 Jerry 的最新改动并将 Tom 的⼯作副
    本进⾏更新。
    2.5.4. 执⾏变更
    当检出之后,你就可以做很多操作来执⾏变更。编辑是最常⽤的操作。你可以编辑已存在的⽂件来,
    例如进⾏⽂件的添加/删除操作。
    你可以添加⽂件/⽬录。但是这些添加的⽂件⽬录不会⽴刻成为版本库的⼀部分,⽽是被添加进待变
    更列表中,直到执⾏了 commit 操作后才会成为版本库的⼀部分。
    同样地你可以删除⽂件/⽬录。删除操作⽴刻将⽂件从⼯作副本中删除掉,但该⽂件的实际删除只是
    被添加到了待变更列表中,直到执⾏了 commit 操作后才会真正删除。
    Rename 操作可以更改⽂件/⽬录的名字。"移动"操作⽤来将⽂件/⽬录从⼀处移动到版本库中的另⼀
    处。
    2.5.5. 复查变化
    当你检出⼯作副本或者更新⼯作副本后,你的⼯作副本就跟版本库完全同步了。但是当你对⼯作副本
    进⾏⼀些修改之后,你的⼯作副本会⽐版本库要新。在 commit 操作之前复查下你的修改是⼀个很好的
    习惯。
    Status 操作列出了⼯作副本中所进⾏的变动。正如我们之前提到的,你对⼯作副本的任何改动都会成
    为待变更列表的⼀部分。Status 操作就是⽤来查看这个待变更列表。
    Status 操作只是提供了⼀个变动列表,但并不提供变动的详细信息。你可以⽤ diff 操作来查看这些变
    动的详细信息。
    2.5.6. 修复错误
    我们来假设你对⼯作副本做了许多修改,但是现在你不想要这些修改了,这时候 revert 操作将会帮助
    你。
    Revert 操作重置了对⼯作副本的修改。它可以重置⼀个或多个⽂件/⽬录。当然它也可以重置整个⼯
    作副本。在这种情况下,revert 操作将会销毁待变更列表并将⼯作副本恢复到原始状态。
    2.5.7. 解决冲突
    合并的时候可能会发⽣冲突。Merge 操作会⾃动处理可以安全合并的东⻄。其它的会被当做冲突。例
    如,“hello.c” ⽂件在⼀个分⽀上被修改,在另⼀个分⽀上被删除了。这种情况就需要⼈为处理。
    Resolve 操作就是⽤来帮助⽤户找出冲突并告诉版本库如何处理这些冲突。
    2.5.8. 提交更改
    Commit 操作是⽤来将更改从⼯作副本到版本库。这个操作会修改版本库的内容,其它开发者可以通
    过更新他们的⼯作副本来查看这些修改。
    在提交之前,你必须将⽂件/⽬录添加到待变更列表中。列表中记录了将会被提交的改动。当提交的
    时候,我们通常会提供⼀个注释来说明为什么会进⾏这些改动。这个注释也会成为版本库历史记录的⼀
    部分。Commit 是⼀个原⼦操作,也就是说要么完全提交成功,要么失败回滚。⽤户不会看到成功提交
    ⼀半的情况。
  6. 安装配置
    3.1. 下载
    https://www.visualsvn.com/downloads/ (服务器)
    http://tortoisesvn.net/downloads.html (客户端)
    最后下载完成的安装包
    3.2. 安装
    3.2.1. 安装 VisualSVN Server
  7. 双击安装程序 VisualSVN-Server-4.2.1-x64.msi
  8. 勾选复选框选择同意,然后选择 Next,选择 Upgrade
  9. 选择默认配置,选择 Next
  10. 设置服务器的安装路径、资源的存放⽬录及端⼝
  11. 使⽤默认配置,选择Next
  12. 如果出现这个弹窗,选择 Ignore 忽略即可
  13. 等待安装,安装完成后可勾选复选框,然后选择 Finish
  14. 出现如下窗⼝,则表示安装成功
    3.2.2. 安装 TortoiseSVN
  15. 双击安装程序 TortoiseSVN-1.13.1.28686-x64-svn-1.13.0.msi
  16. 选择 Next,然后勾选 command line client tools,选择 Next
  17. 设置TortoiseSVN的安装路径,勾选 command line client tools
  18. 进⼊到TortoiseSVN软件使⽤协议界⾯,直接选择 Install 进⾏安装
  19. 安装完成之后,直接选择 Finish 即可
  20. 在任意空⽩地⽅,右键,出现如下内容,则表示安装成功
    3.3. 配置
    说明:服务器端需要提供IP、端⼝、帐号、密码供客户端使⽤。即有如下配置
    3.3.1. 设置IP和端⼝
  21. 打开服务器,点击 VisualSVN Server,选择 Configure authentication options…
  22. 设置Server name ,建议使⽤当前IP
    3.3.2. 新建账号密码
    Server name的值可以设置为:
    1.127.0.0.1 (只能本地⾃⼰访问)
    2.电脑⽤户名(只能本地⾃⼰访问)
    3.当前IP(能够拼通IP的⽤户均可访问)
    Server Port使⽤默认值即可
    查看当前IP:
    打开dos窗⼝(Windows+R键),输⼊ipconfig,按回⻋
  23. 右键左侧菜单 User,选择 Create User
  24. 设置⽤户的账户和密码
    3.3.3. 新建分组
  25. 选择 Group 右键,选择 Create Group…
  26. 设置分组名称,及为分组添加⽤户
  27. SVN使⽤
    4.1. 新建版本库
  28. 选择 Repositories 右键,选择 Create New Repository…
  29. 选择默认设置,选择下⼀步,设置仓库名称
  30. 设置仓库⽬录 (选择任意⼀个选项都可)
  31. 设置仓库的访问权限(这⾥设置所有svn⽤户都有读/写权限)
  32. 仓库创建完成
    4.2. 签⼊项⽬到SVN(import)
  33. 拷⻉远程仓库的地址
  34. 选择任意项⽬,右键选择 TortoiseSVN,选择 import
  35. 将上⼀步拷⻉的仓库地址粘贴到地址栏
  36. 选择永久接受
  37. 输⼊⽤户账号和密码
  38. 导⼊成功
  39. 仓库右键,选择刷新,在服务器中看到的效果
    4.3. 检索项⽬(check out)
  40. 复制要下载的项⽬的远程地址
  41. 在需要检索项⽬的⽬录中,右键选择 SVN Checkout…
  42. 输⼊远程地址,设置项⽬的存放位置
  43. 检索完成
    4.4. 提交代码(commit)
  44. 新建⽂件,右键选择 TortoiseSVN,选择 Add,将⽂件添加到版本库列表
  45. 再次点击⽂件,右键,会出现 SVN Commit…
  46. 提交成功
    4.5. 更新代码(update)
  47. 如果当前资源不是最新版本,则可在项⽬中空⽩地⽅右键,选择 SVN Update
  48. 更新成功
    4.6. 版本冲突问题
    4.6.1. 版本冲突原因
    假设A、B两个⽤户都在版本号为100的时候,更新了kingtuns.txt这个⽂件,A⽤户在修改完成之后提
    交kingtuns.txt到服务器,这个时候提交成功,这个时候kingtuns.txt⽂件的版本号已经变成101了。同
    时B⽤户在版本号为100的kingtuns.txt⽂件上作修改,修改完成之后提交到服务器时,由于不是在当前
    最新的101版本上作的修改,所以导致提交失败。此时⽤户B去更新⽂件,如果B⽤户和A⽤户修改了⽂
    件的同⼀⾏代码,就会出现冲突
    4.6.2. 版本冲突现象
    冲突发⽣时,subversion会在当前⼯作⽬录中保存所有的⽬标⽂件版本[上次更新版本、当前获取的
    版本(即别⼈提交的版本)、⾃⼰更新的版本、⽬标⽂件]。
    假设⽂件名是kingtuns.txt
    对应的⽂件名分别是:
    kingtuns.txt.r101
    kingtuns.txt.r102
    kingtuns.txt.mine
    kingtuns.txt
    同时在⽬标⽂件中标记来⾃不同⽤户的更改。
    4.6.3. 版本冲突解决
    4.6.3.1. 场景
  49. 现在A、B两个⽤户都更新项⽬⽂件到本地。
    ⽤户A
    ⽤户B
  50. 项⽬中的 hello.txt ⽂件原始内容为:
  51. A⽤户修改⽂件,添加内容 “A⽤户修改内容” ,完成后提交到服务器
  52. B⽤户修改⽂件,添加内容 “B⽤户修改内容” ,完成后提交到服务器
  53. B⽤户提交更新⾄服务器时提示如下
  54. B⽤户将⽂件提交⾄服务器时,提示版本过期:⾸先应该从版本库更新版本,然后去解决冲突,冲
    突解决后要执⾏svn resolved(解决),然后在签⼊到版本库。在冲突解决之后,需要使⽤svn
    resolved(解决)来告诉subversion冲突解决,这样才能提交更新。
    4.6.3.2. 解决冲突的三种选择
  55. 放弃⾃⼰的更新,使⽤svn revert(回滚),然后提交。在这种⽅式下不需要使⽤svn
    resolved(解决)
  56. 放弃⾃⼰的更新,使⽤别⼈的更新。使⽤最新获取的版本覆盖⽬标⽂件,执⾏resolved filename
    并提交(选择⽂件—右键—解决)。
  57. ⼿动解决:冲突发⽣时,通过和其他⽤户沟通之后,⼿动更新⽬标⽂件。然后执⾏resolved
    filename来解除冲突,最后提交。
    4.6.3.3. 解决冲突
  58. 在B⽤户当前⽬录下,右键选择"SVN Update",执⾏“update”(更新)操作
  59. B⽤户中的 Hello.txt ⽂件出现冲突
  60. 在冲突的⽂件上(选中⽂件–右键菜单—TortoiseSVN—Edit conflicts(解决冲突))
  61. 打开编辑冲突的窗⼝
    Theirs窗⼝为服务器上当前最新版本
    Mine窗⼝为本地修改后的版本
    Merged窗⼝为合并后的⽂件内容显示
  62. 如果要使⽤服务器版本,在Theirs窗⼝选中差异内容,右键,选择Use this text block(使⽤这段
    ⽂本块)。
    同理如果要使⽤本地版本,在协商后,在Mine窗⼝右键,选择Use this text block(使⽤这段⽂本
    块)。
  63. 修改完成后,选择 “Mark as resolved”(标记为解决),然后选择"Save"(保存⽂件),关闭窗⼝
    即可
  64. 此时,当前冲突已解决,可再次选择 "SVN Commit"提交⽂件
    注:也可先不标记为解决,直接保存⽂件后,在B⽤户的冲突⽬录下,选中⽂件—右键菜单—
    TortoiseSVN—Resolved(解决)。然后再提交⽂件。
    4.6.3.4. 如何降低冲突解决的复杂度
  65. 当⽂档编辑完成后,尽快提交,频繁的提交/更新可以降低在冲突发⽣的概率,以及发⽣时解决冲
    突的复杂度。
  66. 在提交时,写上明确的message,⽅便以后查找⽤户更新的原因,毕竟随着时间的推移,对当初
    更新的原因有可能会遗忘
  67. 养成良好的使⽤习惯,使⽤SVN时每次都是先提交,后更新。每天早上打开后,⾸先要从版本库获
    取最新版本。每天下班前必须将已经编辑过的⽂档都提交到版本库。
  68. Idea集成使⽤SVN
    5.1. 配置SVN环境
  69. File —> Other Settings(全局配置;Settings是局部配置) —> Version Control —> Subversion
  70. 配置svn
  71. 重启Idea
    5.2. 检索项⽬
  72. 选择 VCS —> Checkout from Version Control —> Subversion
  73. 添加远程仓库中项⽬的URL
    找不到svn.exe⽂件,TortoiseSVN的bin⽬录下⾯没有svn.exe
    之所以没有是因为安装TortoiseSVN的时候没有勾选指定安装项,添加command line client
    tools
  74. 点击添加的URL,选择 Checkout
  75. 选择检索的项⽬的存放位置
  76. 选择Destination,根据⾃⼰的偏好选择,其他配置默认,单击 OK
  77. 选择 1.8 Format,点击 OK
  78. 已经check out⼀个项⽬,是否要打开,选择 Yes
  79. 选择 Add
  80. 此时,项⽬就可以与远程仓库关联
    5.3. 提交代码
  81. 选择 VCS —> Commit…
  82. 选择需要提交的⽂件,填写提交信息,选择 Commit
  83. 提交成功后,会在Idea最下⾯显示提交状态
    注:项⽬提交前,最好先更新,然后再提交。
    5.4. 更新代码
  84. 选择 VCS —> Update Project…
  85. 默认即可,直接选择 OK
  86. 更新成功的提示信息
    5.5. 导⼊项⽬
  87. 选择 VCS —> Import into Version Control —> Import into Subversion
  88. 选择 “+” 添加项⽬导⼊的地址(可⼿动添加⼀个⽂件夹,项⽬中的⽂件会放置在该⽂件夹中,⽂件
    名⾃定义)
  89. 选择要导⼊的路径,选择 Import
  90. 选择要导⼊的项⽬,点击 OK
  91. 检查导⼊的路径,填写导⼊信息,选择 OK
  92. 在远程仓库中检查是否导⼊成功即可。
    5.6. 版本冲突问题
  93. 如果未更新,就提交资源(有其他⽤户也提交过资源),则提交失败
  94. 此时,执⾏更新操作,将其他⼈提交过的资源更新到本地,会提示冲突
  95. 通常选择合并,再选择需要保留的代码,选择好之后选择 Apply
  96. 提示更新成功
  97. 再次选择提交,成功解决冲突

你可能感兴趣的:(Maven&SVN)