文档章节

Git+IntellijIDE 使用总结

bill2candy
 bill2candy
发布于 2016/09/10 14:44
字数 1464
阅读 139
收藏 2

Git+IntellijIDE是当前最流行的开发工具组合,相信用过的人都体会到了他们的强大和易用。下面就对使用该工具接近一年,写一个总结,以备后来者学习和借鉴。

首先,安装git和IDE工具,以及搭建git服务器,不在本次总结之内。假定,以上已经配置完整。

1 生成SSH KEY

1.1 打开Git Bash,输入ssh-keygen -t rsa运行命令,按提示设置安装目录及密码,按enter键安装在默认目录(通常为C:\Documents and Settings\username\.ssh\ 或者 C:\Users\username\.ssh)。key密码为空。注意,过程中不要改名字,使用默认就可以。

1.2 到默认路径下面去找.ssh文件夹里面的id_rsa和id_rsa.pub文件。id_rsa.pub里面就是生成的SSH key。

1.3 将id_rsa.pub文件发给GIT管理员

2 设置Git用户名和Email

git config --global user.name "xxx"

git config --global user.email "xxx@gmail.com"

git config –list

3 git clone项目

打开IDE,如下图,点击git,

输入git的地址

如果需要修改远端地址,在项目根目录,运行git bash 命令

git remote set-url origin git@192.168.0.158:java/sps.git

git remote -v

4 git 日常操作

使用git 和其他的vcs版本管理工具一样,每天上班先git pull,下班commit的习惯。并且每次commit之前,最好做一下git pull,这样产生的冲突会比较少。

下面就以日常最常用的命令,来讨论。

4.1 git pull/fetch

这个主要注意,从远端下载代码和本地冲突的情况,如果产生冲突,一定要仔细解决,避免误删别人的代码,其他的解决冲突都要遵循此原则:切记删除别人的代码。

4.2 git commit

及时commit本地修改,到本地版本库,避免失误删除做的工作。Commit之前,一定记得pull一下远端分支,减少冲突。

如果遇到冲突,选择手动合并,对冲突文件进行修改,然后git add进去,commit会继续进行。

例如:

在Git merge中没有提到,如果没有冲突才会自动合并,否则将会提出哪些文件产生了冲突。产生冲突的原因是因为有多个开发人员修改了同一个文件的相同地方导致,使得Git系统不知道使用谁的代码,此时就需要开发人员自己来抉择,选择其中一份代码,并且将其他的代码删除。

假设研发-A和研发-B两位同事同时开发网络聊天功能,因此,他们同时修改了Chat.java文件的eat函数。研发-A首先提交了代码到线上的版本控制系统,然后研发-B此时从线上系统更新代码下来,此时就会产生冲突。当然,在不同分支之间切换开发也可能导致发生冲突,或者说只要是代码合并的操作都有可能出现冲突,原因也是同时修改了文件中的同一处代码段。例如Chat.java的原始代码为:

public class Chat {    public static void main(String[] args) {

        System.out.println("Chat with me");

    }

}

研发-A在master分支上修改了Chat.java的main函数的第一行代码,代码如下:

public class Chat {    public static void main(String[] args) {

        System.out.println("Chat with me, I'm RD-A.");

    }

}

研发-B在net分支也修改了同样的地方,代码如下:

public class Chat {    public static void main(String[] args) {

        System.out.println("我和研发-A的代码不一样.");

    }

}

此时,研发-B提交代码到线上系统之后,研发-A将net分支代码同步到本地,并且将net分支通过Git merge合并到master分支。此时就会引发冲突,如图8-16所示。

图8-16 产生冲突

从图8-16中可以看到,图中指出自动合并失败,Chat.java产生了冲突。我们看看此时Chat.java文件中的内容是怎样的:

public class Chat {    public static void main(String[] args) {
<<<<<<< HEAD
        System.out.println("Chat with me, I'm RD-A.");
=======
        System.out.println("我和研发-A的代码不一样.");
>>>>>>> net
    }
}

其实很容易看懂这份冲突的文件,它的意思是,在System.out.println()语句这里出现了多份代码,Git不知道如何解决。在我们的示例中,在“<<<<<<< HEAD”与“=======”之间的是研发-A的master分支的代码,而“=======”与“>>>>>>> net”则是研发-B的net分支中的代码。这两份代码到底要哪一份,这需要你来裁决,因此,给出了冲突提示。假设研发-A的代码是正确的,那么需要将“=======”与“>>>>>>> net”之间的代码删除,并且将“<<<<<<< HEAD”、“=======”、“>>>>>>> net”这些冲突标识也删除。最终代码如下:

public class Chat {    
      public static void main(String[] args) {

        System.out.println("Chat with me, I'm RD-A.");

    }

}

此时,冲突就已经被处理了。重新Git add和commit提交代码即可。

4.3 git stash/unstash

该功能相当好用,可以将本地修改,stash暂存本地工作环境,做其他的操作(修复主分支的bug),完成之后,在unstash恢复本地工作环境

4.4 git push

多次commit完成之后,需要将本地仓库同步到远程仓库,供团队其他成员使用。一般使用如下配置推送,

其中,push为默认选择,推送到远程,进行同步,force push 为强制本地版本覆盖远端版本,push tags将本地的tag push 到远端,这些操作都对应git bash中的命令,有兴趣可以自己查阅。

4.5 git merge

该命令是将其他分支的提交合并到当前分支,一般使用如下配置即可,

本地当前在dev 分支,这个操作是将master分支的所有提交merge到本地dev上,合并策略一般默认即可。

4.6 git tag 操作

git pull –tags

git push –tags

git tag –d tag1.0

 

© 著作权归作者所有

bill2candy

bill2candy

粉丝 24
博文 13
码字总数 16628
作品 1
青岛
后端工程师
私信 提问
常见Shell命令用法总结

常见命令用法总结 ----- 目录: --- 关于grep的总结 关于egrep的总结 关于tr的总结 关于sort的总结 关于uniq的总结 关于cut的总结 关于tee的总结 关于split的总结 关于type的使用 关于find的...

小骏骏
2016/02/19
70
0
《Yaf零基础学习总结》系列技术文章整理收藏

《Yaf零基础学习总结》系列技术文章整理收藏 1关于Yaf的一些说明[转Yaf作者] 2Yaf零基础学习总结1-Yaf框架简介 3Yaf零基础学习总结2-Yaf框架的安装 4Yaf零基础学习总结3-Hello Yaf 5Yaf零基础...

开元中国2015
2015/05/30
266
1
Android Handler异步通信:深入详解Handler机制源码

前言 在开发的多线程应用场景中,机制十分常用 今天,我将手把手带你深入分析 机制的源码,希望你们会喜欢 目录 1. Handler 机制简介 在多线程的应用场景中,将工作线程中需更新的操作信息 ...

carson_ho
2018/05/21
0
0
Java 集合系列目录(Category)

Java 集合系列目录(Category) 下面是最近总结的Java集合(JDK1.6.0_45)相关文章的目录。 01. Java 集合系列01之 总体框架 02. Java 集合系列02之 Collection架构 03. Java 集合系列03之 Arra...

foxeye
2016/02/29
72
0
apply,map,applymap总结

Python中apply,map,applymap总结 pandas中DataFrame 数据类型,使用map,apply方法使用较多,做一下总结。参考https://www.cnblogs.com/cymwill/p/7577369.html 总结: apply 用在dataframe...

全部原谅
2018/09/04
1
0

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
4
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
8
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
874
10
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部