Hycz's Blog

Life is a game. Why so serious?

Category Archives: SVN

[转]svn命令行工具安装使用(windows)

源帖地址:http://hi.baidu.com/daralis_dy/blog/item/4755e77a48cae0e10bd187fe.html
svn命令行工具安装使用(windows)
2011-03-30 08:52

从http://subversion.tigris.org获取subversion for windows的版本,安装之后就有了svn.exe这个基于命令行的客户端工具。

安装装程序会自动把svn.exe的路径加入了path环境变量,但是默认路径c盘内,需要修改为安装到的盘符路径。

在“我的电脑”上右键选择“属性”-》“高级”-》“环境变量”,

如安装在d盘,修改用户变量中的APR_ICONV_PATH为

d:\Program Files\Subversion\iconv

在系统变量中的PATH后面添加

d:\Program Files\Subversion\bin(记得加;号隔开两项路径)

修改了环境变量之后要重启电脑才能生效。

现在在命令行中输入svn –help,如能正确执行,则安装成功。

Advertisements

2011/06/13 在Eclipse中配置Cassandra

首先,整个过程基本基于下面这篇文章:

原帖地址:http://www.congci.com/item/cassandra-for-eclipse

我们将从svn中下载Cassandra的源代码,完成编译,并执行相应的单元测试。

配置环境

1 安装jdk6,ant。

2 安装Eclipse3.5

3 在Eclipse中安装http://subclipse.tigris.org/update_1.6.x

在Eclipse的菜单选择:Help –> Install New Software

image

接下来,就可以安装subclipse: Add –> 输入名称和地址http://subclipse.tigris.org/update_1.6.x ->勾选所有需要安装的选择

image

最好点击next,安装提示的要求一步一步操作。最后等待subclipse安装完成后重启Eclipse。

下载Cassandra源码

在Eclipse中新建一个svn项目

image

选择:创建新的资源库位置

image

获取svn:https://svn.apache.org/repos/asf/cassandra/tags/cassandra-0.6.2/

image

按照如下选择

image

然后根据提示创建一个Java Project,svn检出操作完成后,我们就可以看到刚刚创建的项目了

image

这样Cassandra的源代码就下载完毕了。

编译Cassandra

假设我们下载的Cassandra源代码的位置在D:\workspace\cassandra-0.6.2,那么我们使用命令行工具在这个目录下执行ant的编译操作。

image

如果编译成功,提示如下:

image

可以看到,执行编译的同时,也生成了thrift,avro和antlr的java源文件。

在Eclipse中编辑Cassandra源码

源代码虽然可以编辑成功,但是我们还是无法利用Cassandra对源代码进行方便的修改。

接下来,要一步一步配置Eclipse,使其可以方便地编辑Cassandra源码。

首先,将D:\workspace\cassandra-0.6.2\lib目录下的所有jar包添加到项目的Build Path中。

image

然后,编辑Src目录的属性,默认的设置为

image

将默认的目录删除,然后添加如下Src目录

image

添加完成之后,目录结构如下

image

按照正常的流程来说,我们对Eclipse的配置就算完成了,可以很方便地在Eclipse中编辑Cassandra源码了。

但是Eclipse还是有一些小Bug可能会影响到正常的功能,比如我遇到的这个情况

image

大家可以看到,GarbageCollectorMXBean其实是jdk中的一个类,但是Eclipse提示找不到定义。处理的办法如下

打开项目的Build Path,先移除JRE System Library

image

然后在将之前移除JRE System Library的添加回来。

image

最后在刷新整个项目,错误提示的问题就解决了。

image

运行单元测试

我们可以将单元测试的代码也添加到Eclipse中。

步骤非常简单:

1 添加JUnit4的jar包

2 添加test目录下的测试代码到Src中。

添加成功后项目的列表如下

image

我们可以直接在test中运行已有的单元测试。

打包发布

当我们完成对Cassandra源码的修改以后,可以将修改后的版本打包发布出来。

使用ant的命令行:ant release

image

执行完毕以后,我们可以在D:\workspace\cassandra-0.6.2\build目录中看到打包后的文件

image

这样,我们就可以使用修改后的Cassandra了。

———————————————————————恶心的分割线————————————————————————

下面是一些我遇到的问题

  1. 之前装了ant(地址:http://apache.etoak.com//ant/binaries/apache-ant-1.8.2-bin.tar.gz),但是没有装svn,所以把整个project下下来之后,ant出错,错误是"Cannot run program "svn":CreateProcess error=2" ,所以还要下个svn,方法见这篇文章https://hycz.wordpress.com/2011/06/13/%E8%BD%ACsvn%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%B7%A5%E5%85%B7%E5%AE%89%E8%A3%85%E4%BD%BF%E7%94%A8windows/
  2.  设置Java Build Path中Source目录,0.8.0版本和0.6.2不太一样,不过无论什么版本,源码目录其实已经写在了build.xml中。以下内容摘自0.8.0版本的build.xml中
    <echo file=".classpath"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
    <classpath>
      <classpathentry kind="src" path="src/java"/>
      <classpathentry kind="src" path="src/gen-java"/>
      <classpathentry kind="src" path="interface/thrift/gen-java"/>
      <classpathentry kind="src" path="drivers/java/src"/>
      <classpathentry kind="src" path="drivers/java/test"/>
      <classpathentry kind="src" path="test/unit"/>
      <classpathentry kind="src" path="test/long"/>
      <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
      <classpathentry kind="output" path="build/classes/main"/>
      <classpathentry kind="lib" path="build/classes/thrift"/>
      <classpathentry kind="lib" path="build/test/classes"/>
      <classpathentry kind="lib" path="test/conf"/>
    ]]>
    	</echo>

    这些目录便是需要在Eclipse中设置的

  3. jar的导入问题,(醒目!!下面的可以用,但是有更简单的设置,开发过程中需要用到的jar包都放在cassandra-0.8.0\build\lib\jars中,直接导入即可),除了将lib文件夹下的jar导入,还有一些其他的jar包不在cassandra目录下。我是在命令行中用ant编译之后才进行的jar导入,在用ant编译的过程中,还自动从网上下载了一些jar文件,我的电脑上是在“C:\Users\用户名\.m2\repository”中,详细的列表可以参见cassandra-0.8.0\build文件夹下的build-dependencies.xml,这个应该是在编译之后产生的。不过显然,更加原始的依赖查询是写在了build.xml中。以下内容摘自0.8.0版本的build.xml中
    <!-- Publish artifacts to Maven repositories -->
      <target name="mvn-install"
              depends="maven-declare-dependencies,artifacts,jar,sources-jar,javadoc-jar"
              description="Installs the artifacts in the Maven Local Repository">
    
        <!-- the parent -->
        <install pomFile="${build.dir}/${final.name}-parent.pom"
                 file="${build.dir}/${final.name}-parent.pom"
                 packaging="pom"/>
    
        <!-- the distribution -->
        <install pomFile="${build.dir}/${final.name}-dist.pom"
                 file="${build.dir}/${final.name}-dist.pom"
                 packaging="pom"/>
        <install pomFile="${build.dir}/${final.name}-dist.pom"
                 file="${build.dir}/${final.name}-bin.tar.gz"
                 packaging="tar.gz"
                 classifier="bin"/>
        <install pomFile="${build.dir}/${final.name}-dist.pom"
                 file="${build.dir}/${final.name}-src.tar.gz"
                 packaging="tar.gz"
                 classifier="src"/>
    
        <!-- the cassandra-thrift jar -->
        <install pomFile="${build.dir}/${ant.project.name}-thrift-${version}.pom"
                 file="${build.dir}/${ant.project.name}-thrift-${version}.jar"/>
        <install pomFile="${build.dir}/${ant.project.name}-thrift-${version}.pom"
                 file="${build.dir}/${ant.project.name}-thrift-${version}-sources.jar"
                 classifier="sources"/>
        <install pomFile="${build.dir}/${ant.project.name}-thrift-${version}.pom"
                 file="${build.dir}/${ant.project.name}-thrift-${version}-javadoc.jar"
                 classifier="javadoc"/>
    
        <!-- the cassandra-all jar -->
        <install pomFile="${build.dir}/${final.name}.pom"
                 file="${build.dir}/${final.name}.jar"/>
        <install pomFile="${build.dir}/${final.name}.pom"
                 file="${build.dir}/${final.name}-sources.jar"
                 classifier="sources"/>
        <install pomFile="${build.dir}/${final.name}.pom"
                 file="${build.dir}/${final.name}-javadoc.jar"
                 classifier="javadoc"/>
    
        <!-- the cassandra-cql jar -->
        <install pomFile="${build.dir}/${ant.project.name}-cql-${cql.driver.version}.pom"
                 file="${build.dir}/${ant.project.name}-cql-${cql.driver.version}.jar"/>
        <install pomFile="${build.dir}/${ant.project.name}-cql-${cql.driver.version}.pom"
                 file="${build.dir}/${ant.project.name}-cql-${cql.driver.version}-sources.jar"
                 classifier="sources"/>
        <install pomFile="${build.dir}/${ant.project.name}-cql-${cql.driver.version}.pom"
                 file="${build.dir}/${ant.project.name}-cql-${cql.driver.version}-javadoc.jar"
                 classifier="javadoc"/>
      </target>
    
      <target name="publish"
              depends="mvn-install"
              if="release"
              description="Publishes the artifacts to the Maven repository">
    
        <!-- the parent -->
        <deploy pomFile="${build.dir}/${final.name}-parent.pom"
                file="${build.dir}/${final.name}-parent.pom"
                packaging="pom"/>
    
        <!-- the distribution -->
        <deploy pomFile="${build.dir}/${final.name}-dist.pom"
                file="${build.dir}/${final.name}-dist.pom"
                packaging="pom"/>
        <deploy pomFile="${build.dir}/${final.name}-dist.pom"
                file="${build.dir}/${final.name}-bin.tar.gz"
                packaging="tar.gz"
                classifier="bin"/>
        <deploy pomFile="${build.dir}/${final.name}-dist.pom"
                file="${build.dir}/${final.name}-src.tar.gz"
                packaging="tar.gz"
                classifier="src"/>
    
        <!-- the cassandra-thrift jar -->
        <deploy pomFile="${build.dir}/${ant.project.name}-thrift-${version}.pom"
                file="${build.dir}/${ant.project.name}-thrift-${version}.jar"/>
        <deploy pomFile="${build.dir}/${ant.project.name}-thrift-${version}.pom"
                file="${build.dir}/${ant.project.name}-thrift-${version}-sources.jar"
                classifier="sources"/>
        <deploy pomFile="${build.dir}/${ant.project.name}-thrift-${version}.pom"
                file="${build.dir}/${ant.project.name}-thrift-${version}-javadoc.jar"
                classifier="javadoc"/>
    
        <!-- the cassandra-all jar -->
        <deploy pomFile="${build.dir}/${final.name}.pom"
                file="${build.dir}/${final.name}.jar"/>
        <deploy pomFile="${build.dir}/${final.name}.pom"
                file="${build.dir}/${final.name}-sources.jar"
                classifier="sources"/>
        <deploy pomFile="${build.dir}/${final.name}.pom"
                file="${build.dir}/${final.name}-javadoc.jar"
                classifier="javadoc"/>
    
        <!-- the cassandra-cql jar -->
        <deploy pomFile="${build.dir}/${ant.project.name}-cql-${cql.driver.version}.pom"
                file="${build.dir}/${ant.project.name}-cql-${cql.driver.version}.jar"/>
        <deploy pomFile="${build.dir}/${ant.project.name}-cql-${cql.driver.version}.pom"
                file="${build.dir}/${ant.project.name}-cql-${cql.driver.version}-sources.jar"
                classifier="sources"/>
        <deploy pomFile="${build.dir}/${ant.project.name}-cql-${cql.driver.version}.pom"
                file="${build.dir}/${ant.project.name}-cql-${cql.driver.version}-javadoc.jar"
                classifier="javadoc"/>
      </target>

    我也是刚刚开始用,估计是编译过程中根据此列表依次检查依赖,如果缺少jar,则从网上下载,下载地址写在了根目录下的build.properties.default文件中,并放在相应的目录中,然后把这些目录名写到build-dependencies.xml中。下载的jar分为两种,一个是源码,一个是编译好的。当我们导入了cassandra-0.8.0\lib下的所有jar之后,会发现还有类找不到,那么这些类就是在这些自动下载的jar中,需要按需要手动在Eclipse中导入。

  4. 待续。。

[转]windows下svn客户端下载与安装

Windows下svn客户端TortoiseSVN的安装和操作
完成了svn服务器的安装配置,怎么使用svn呢?在Windows下,最常用的svn客户端是TortoiseSVN,有时简称为TSVN。
TortoiseSVN安装

可以从http://tortoisesvn.tigris.org/下载最新版,目前最新版是TortoiseSVN-1.5.6.14908。

下载后,安装。重启机器,使目录图标生效。

在资源管理器中,鼠标右键点击任意位置,右键菜单中出现“SVN Checkout”,即为安装成功。
svn操作流程

开发人员使用svn进行开发的一般流程是:
checkout(检出)项目
——> 更新文件或目录 ——> update
——> 修改文件或目录 —— commit(提交)变更
——> 增加文件或目录 ——> add(增加) 文件或目录——> commit(提交)
——> 删除文件或目录 ——> commit(提交)上一级目录

其中,checkout只进行一次,update、commit、add操作根据需要会经常使用。
checkout(检出)操作

在资源管理器中,鼠标右键点击任意位置,在菜单中选择”SVN Checkout”。

出现对话框,在”URL of repository:”中输入svn串,格式是”协议://ip:port/版本库/项目/目录“。根据实际情况输入,例如http://code.google.com/p/google-web-toolkit/source。如有疑问,向svn服务器管理员询问。

在“checkout directory”中输入本地存放代码的目录,请选择空目录或新目录。svn会清空该目录下的一切文件。输入完毕,点击”ok”按钮。

如果需要,会提示输入用户名和密码。选上”Save authentication”后,以后可以自动登录,不必重输密码。

checkout…有时候时间会很长。结束,点”ok”。
update(更新)操作

在资源管理器中,选择本地目录或文件,鼠标右键菜单选择”SVN Update”。会提示有无文件需要更新,点”ok”完成。
commit(提交)操作

把本地目录中变化了的文件或目录提交到版本库中,用commit操作。增加新文件或目录,要先用add,再commit。删除文件或目录,commit上一级目录。

在资源管理器中,选择本地目录或文件,鼠标右键菜单选择”SVN Commit”。

显示分上下2个框的界面。在上框输入说明文字,建议写版本号或变更原因,以便将来查找。下框列出提交的内容。没有可提交的内容,下框中会显示一段说明文字。点“ok”。

提交结束,显示结果。点“ok”。
解决代码冲突

如果commit时出现“You have to update your work copy first.”红色警告,说明版本库中的此文件已经被其他人修改了。请先点“ok”按钮退出。执行update,然后再commit。

如果修改与update得到的代码不冲突,则自动合并。如果冲突(比如对同一行代码进行了修改),则出现”One or more files are in a conflicted state.“红色警告,并产生几个文件记录冲突。一般情况下,我们不要直接编辑冲突文件。而按照以下操作手工解决冲突。

在资源管理器中,选择commit时冲突的那个文件,鼠标右键菜单选择”Edit conficts”。

出现界面,分为”Theirs”、”Mine”和”Merged”3部分,表示”别人修改的内容”、 ”我修改的内容”和”合并后的结果”3部分。我们是要将”别人修改的内容”和”我修改的内容”有取舍地合并起来,形成”合并后的结果”。

合并一般分为4种情况:

* 保留”我的修改”,舍弃”别人的修改”。鼠标右键点击Mine框的相应行,点击”Use this text block”。
* 舍弃”我的修改”,保留”别人的修改”。鼠标右键点击Theirs框的相应行,点击”Use this text block”。
* 同时保留”我的修改”和”别人的修改”,并将”我的修改” 放在前面。鼠标右键点击Mine框的相应行,点击”Use text block from mine before theirs”。
* 同时保留”我的修改”和”别人的修改”,并将”别人的修改”放在前面。鼠标右键点击Mine框的相应行,点击”Use text block from theirs before mine”。

合并完成,Ctrl+S存盘,退出。

然后,在资源管理器中,选择冲突文件,鼠标右键菜单选择”Resolved”,标记冲突已解决。系统会自动删除因冲突而新建的文件。此时,就可以继续进行commit操作了。
add(增加)操作

增加新文件或目录,要先用add,再commit。

在资源管理器中,选择新增的目录或文件,鼠标右键菜单选择”Add”。

提示增加的文件。点“ok”继续。结束点“ok”。
删除操作

删除文件或目录,commit上一级目录。