前言
在之前写过Git
的一些基本命令,但是,实际开发工作中,一般不直接使用命令行,而是使用集成开发工具,工具可以极大提高效率,而不用去记忆繁多的命令。团队中无法使用Git
的主要原因我觉得也在于现在工具与Git
结合的说明文档过少。
下面讲Eclipse
与Git
的集成。 #1 环境准备 ###1.1 JDK 略 ###1.2 Eclipse 这里就不再讲如何安装插件了,而且直接下载Eclipse4.5 Mars
(其它版本未下载测试过),这个版本直接自带了Git的插件,也避免了各种翻墙安装不了、各种鬼速卡死问题。Eclipse 官网下载 64Bit 32Bit 。如果你连这个网站也上不了,可以用我的Win 64Bit备份。 ###1.3 git.oschina.net帐号 在git.oschina.net中注册帐户,并仓库一个空的仓库,如下,我创建了一个git-practice练习仓库,地址:http://git.oschina.net/zhengchaoken/git-practice git clone https://git.oschina.net/zhengchaoken/git-practice.git
###1.4 创建工程 Eclipse
解压启动后,创建一个Java Project
,名字取为git-practice
,在其中创建一个类HelloWord
代码如下:
package com.zx.test;
/**
* @author Ken
* @version 2016-06-29
*/
public class HelloWord {
}
#2 基础练习 ###2.1 share project 项目上右键,Team
-> Share project...
Finish后工程上会有一定的变化。
打开工程的实际目录,可以看到Git已经初始化了这个目录为仓库,但是NO-HEAD和包及文件夹上的问题表示还没有提交到仓库。
我们用Git Bash来看下
$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
.classpath
.gitignore
.project
.settings/
src/
nothing added to commit but untracked files present (use "git add" to track)
这提示项目工程的配置文件.classpath,.project等还没有提交。 ###2.2 本地提交commit
先commit 一下吧,如下:
选中要提交的文件,写好注释,提交即可。
提交完后,工作空间目录中的代码也就与本地仓库同步了
###2.3 修改及比对代码diff
修改代码是码农的第一要务,新需求,Bug Fix 都需要不断修改代码。这里对HelloWorld
类添加一个main方法。保存,即可看到Eclipse
已经在文件名前用>
符号提示了这个文件有了变动,同时逐级的目录结点止也有>
提示,这就很直观地表示该文件有修改。这是不是就是git status
的功能的可视化?
挺好的。但是如果修改很多文件,在不同的文件切换来来去去,最后,记忆不好,不知道文件具体修改哪里了,怎么办? 不用担心,还是项目右健->Team
,在菜单中找到Synchronize Workspace
,就可以找到熟悉的文件差异对比视图了。
这个是git diff
吧,来看下:
$ git diff
diff --git a/src/com/zx/test/HelloWord.java b/src/com/zx/test/HelloWord.java
index c7e09fa..61c2ed0 100644
--- a/src/com/zx/test/HelloWord.java
+++ b/src/com/zx/test/HelloWord.java
@@ -5,5 +5,7 @@ package com.zx.test;
* @version 2016-06-29
*/
public class HelloWord {
-
+ public static void main(String[] args) {^M
+ System.out.println("Hello world");^M
+ }^M
}
###2.4 回复代码reset
文件改错了?如果是部分,那么就在2.3中提到的Synchronize Workspace
中的视图中,把错的那些改回来。如果是都已经不需要了,那么git reset
拉。 步骤项目右健->Team->Reset
,我们要回复工作空间的代码,当然选择带有working directory
的reset type
执行后,整个工作空间都清静了,世界又回到原来的样子。
#3 同步远程服务器 ###3.1 本地代码初始化到远程仓库push
像本文写的就是这种情景,git.oschina.net上新建的仓库中没有代码,需要在本地初始化工程提交到远程仓库。这种一般使用第一次初始化远程仓库。 步骤:
- 右键->Team->push Branch 'master'
- 在弹出的窗口中输入要push的远程仓库地址及必要的用户名及密码。点击next
- 对话框中点击“advance push”(因为远程仓库中已有文件,本地与远程仓库不一致,现在要用本地覆盖远程仓库)
- 再次填入要push的远程仓库地址及必要的用户名及密码。点击next
- 选择本地及要push到远程的分支,然后"Add Spec",add后选择‘Force Update’强制覆盖,“Finish”
- 提示成功
- 接着就可以在提交时选择 "commit and push",这样本地仓库的代码和远程服务器对应分支代码都会更新。
###3.2 远程仓库 初始化到 本地 clone
这种情景最常使用,即,从远程仓库检出一个分支,然后,再在这个分支上开发新功能,Fix Bug等。最为常用。 - 在上面步骤基础上删除git-practice工程 - Eclipse -> import -> 'projects from gits' -> 'clone URI' -> 输入对应的git地址https://git.oschina.net/zhengchaoken/git-practice.git ->勾选自己想下载的分支,后续即可。 - 结果
#3 分支练习 分支是Git中最重要的,Git Flow中给出的实践中就有许多分支。而且分支在日常的开发中非常有用,正式环境突然有一个紧急BUG要修复、一个新功能需要调研、每个开发者一个模块的开发任务、需要从某历史版本(分支)拉出新分支开发新产品或功能。等等,都需要分支。而分支也是Git的强项。
3.1 本地切换(创建新的)分支
Eclipse中很简单,项目右键->Team->'Switch To' 选择“new branch ”或选择已经有的本地分支即可。如果选择创建新的分支(从master创建)。如下图
确定后,Eclise工程上就会显示已经切换到该工程。
3.2 远程分支
这个需要你有远程创建的创建分支的管理权限。以git.oschina.net为例:
- 远程创建分支 选择'管理分支'-> '新建分支'
这样就可以从mater拉出一个bug/bugfix分支 - 本地Eclipse切回本地的master分支 - 将远程信息同步到本机 fetch
- 切换到远程分支项目右键->Team->'Switch To' 选择“other ”,在弹出的如下对话框中选择远程的仓库
3.3 分支合并merge
分支创建后必然会遇到合并分支中的功能到特定分支或主干分支。 准备一下,在bugfix分支的main函数中添加一段代码:System.out.println("this is fixbug branch");并提交到远程服务器。 #####准备将bugfix分支的代码合并到master中#####
- 切换回master分支
- 选择'merge'
- 选择被merge的分支 fixbug
- 留意弹出的对话框中的选项,你可以对这样的合并仅移动指针,也可以生成一个commit信息。遇到如下提示表示有需要push到远程的。
- 同上面,项目右键->Team->push Branch 'master' 即可。
3.4 冲突解决
不免开发中有同时修改同一个文件的,这时合并就会造成冲突。
- 创建一个新分支,代码改为如下并提交
public static void main(String[] args) {
new HelloWord().function();
}
void function() {
System.out.println("this is funciton1 branch");
}
- bugfix代码改为如下并提交
public static void main(String[] args) {
System.out.println("Hello world");
new HelloWord().bugFix();
System.out.println("this is fixbug branch");
}
void bugFix(){
System.out.println("fixbug branch commit 2");
}
- 切换到master分支合并bugfix 没有问题
- 合并function1分支 出现冲突,大家都改了同一个类中的同一处代码。
这时根据提示解决冲突,改后代码:
public static void main(String[] args) {
System.out.println("Hello world");
new HelloWord().bugFix();
System.out.println("this is fixbug branch");
new HelloWord().function();
}
void function() {
System.out.println("this is funciton1 branch");
}
void bugFix(){
System.out.println("fixbug branch commit 2");
}
- 标记冲突解决
- 提交
提交对话框会自动为你生成一条merge注释
#4 结语 工具还是极在提升了效率。用Eclipse的过程中感觉Eclipse切换分支的速度是非常快的,但是当文件很多及要将要比对的文件超级多时就慢了,这时提示在计算'Git status' 。
2016-07-07 23:33:24 星期四