Archive for 十一月 2013

Eclipse git图文教程

与svn比较,git确实要复杂很多。建议新手朋友先看《Git Pro》这本电子书,用命令行操作一下,再来使用Eclipse的git插件,这样比较容易理解。
Git服务器以OSChina为例,创建帐号,新建项目就不介绍了。
我建了一个测试项目,地址是https://git.oschina.net/pocketdigi/test.git
很多文章都说第一步是给Eclipse装EGit插件,但我的Eclipse里已经自带了Git插件,也许版本不同的缘故,所以没有这一步。
以导入现有项目为例:
我这里的项目是AndroidTest.
第一步,配置本地仓库。
项目上点右键,选择小组-共享项目(英文版请自行翻译),在弹出的对话框里选择Git(如果没有,说明没装Git插件),下一步如下 Continue reading ‘Eclipse git图文教程’ »

Git常用命令

这个不是git教程,不解释其中专业术语.
git init 从当前目录初始化
git clone url 从远程克隆项目
git status 查看文件状态
git add file 根据文件不同的状态,有不同的功能,如果文件是Untracked,就是track文件,如果文件not staged,则是把文件放入stage.参数-A 表示添加所有文件
git commit 提交staged的文件,加-m加上这次提交的说明,不加会要求输入说明.加-a可以跳过git add到stage的步骤.加上--amend,重新提交(撤销上次提交,重新提交)
git diff 查看工作目录中与staged文件的修改之处,加上--staged,查看staged文件和之前已提交的仓库里的文件修改之处.
git rm file删除stage里的指定文件,同时删除工作目录里的文件.再次commit后,该文件就不会纳入管理.如果要取消tracked(删除仓库和stage里信息),且不删除工作目录文件,加上--cached,目录加上-r递归
git mv file 移动文件,相当于执行mv from to,git rm from,git add to三条命令
git log 查看提交的日志 -p展开每次提交内容差异 -5显示最近5次更新,--stat 只显示增改行数统计
git checkout -- file 从仓库中取出指定文件,覆盖工作目录中的对应文件
git remote add name url 添加远程仓库URL,name为别名
git remote rename name1 name2 把远程仓库别名为name1改成name2
git remote -v 显示远程仓库列表
git remote rm name 删除已经添加的远程仓库
git fetch name 从别名为name的远程URL获取本地仓库没有的数据
git pull name branch 从别名为name的远程仓库拉取分支branch,合并到本地工作目录.
git push name branch 将本地仓库推送到远程服务器指定分支(需要先pull远程最新内容)
git remote show name 显示指定远程仓库信息
git reset HEAD file... 撤销暂存的文件
git update-index --assume-unchanged file 不再track指定文件
git update-index --no-assume-unchanged file 继续track指定文件

标签:
git tag -a tagname -m 'comment' 打标签
git push origin tagname 推送标签到服务器
git tag -d tagname 删除本地标签
git push origin :refs/tags/tagname 推送删除远程标签

pull时冲突:
git stash
git pull
git stash pop
会自动merge,再做处理

git clean -fd 清除所有未跟踪的文件

分支操作:
git branch 列出分支,加-v会列出最后一次提交,加-a列出远程分支
git branch 1.2 创建分支名为1.2的分支
git checkout 1.2 切换当前工作分支到1.2
git checkout -b 1.2 checkout加上b参数,会自动创建分支并切换,一条顶上面两条
git branch -d 1.2 删除1.2分支
git merge 1.2 把1.2分支合并到当前工作的分支。git会自己决定当前分支还是1.2作基础
git branch --merged 筛选出你已经与当前分支合并的分支,注:创建分支时会以当前分支为基础创建,所以当前分支已经合并到新分支里
git branch --no-merged 筛选出与当前分支未合并的分支
git branch -D 1.2 强制删除未合并的分支(-d会报错,不让删)
git push 远程仓库名 分支名 推送本地分支到远程仓库,git remote -v查看远程仓库
git push origin :分支名 删除远程分支,注意origin后有空格

Java 泛型 边界extends关键字用法

extends关键字用于指定泛型类继承自哪个类或实现哪些接口,在使用的时候就可以调用父类和接口里的public方法
如:


	public  & IFactory2> Foo(F factory)
	{
		x=factory.create();
	}

其中FF是父类,IFactory和 IFactory2是接口,中间用&隔开,如果有父类,父类必须放在第一个,后面才可接上接口。
传入参数factory,必须继承自FF类,并且实现IFactory和 IFactory2接口.

Java 泛型 工厂模式

使用泛型的类中,要实例化一个泛型类的对象时,不能使用new,可以使用class.newInstance(),但是该类刚好没有默认无参的构造方法,也会出错。所以最好的方法是用工厂模式。 Continue reading ‘Java 泛型 工厂模式’ »

Java 泛型 杠杆利用类型参数推断

一般情况下,我们使用泛型是这样的:


Map map2=new HashMap();

前后都需要加上参数的类型,编译器无法从等号前的参数类型自动推测出后面的参数类型,但使用泛型类型参数推断可以简化部分工作。


	/**
	 * 定义泛型方法
	 * @return
	 */
	public  Map map()
	{
		return new HashMap();
	}
	
	public void ff()
	{
		//调用时,会自动根据前面的参数类型返回所需的map
		Map map=map();
		Map map2=map();
	}

但是,不能直接将map()方法作为其他方法的参数传入,因为它没法判断所需的类型。需要显示说明:


	public void ff(Map m)
	{
	}
        //调用
        Main main=new Main();
        main.ff(main.map());

Java 泛型 元组的使用

一个方法,只能有一个返回值,如果我们要返回多个对象,不用元组的话,唯一的方法就是建一个类,包含这些对象,然后返回这个类的实例,但这么一来,每个方法,如果返回的对象不同,就得定义一个不同的类。元组,就是定义一个类,包含有指定数目,但不定类型的对象,配合泛型,对象可以是任意类型。 Continue reading ‘Java 泛型 元组的使用’ »

Java动态代理

代理可以将额外的操作和实际对象分离,类似于一个中间人的角色,使用基类或接口作为参数,这样在需求有变动时就很容易修改,也可以在代理中监控各个方法的调用。
以下代码摘自《Think in Java》 Continue reading ‘Java动态代理’ »

Java中的goto语句 标签的使用

Java里并没有goto语句,但是标签的功能类似于goto,可以实现代码级的跳转。好吧,反正我之前是没用过这玩意,也不建议用,太复杂了。 Continue reading ‘Java中的goto语句 标签的使用’ »