Git+IntellijIDE是当前最流行的开发工具组合,相信用过的人都体会到了他们的强大和易用。下面就对使用该工具接近一年,写一个总结,以备后来者学习和借鉴。java
首先,安装git和IDE工具,以及搭建git服务器,不在本次总结以内。假定,以上已经配置完整。git
1.1 打开Git Bash,输入ssh-keygen -t rsa运行命令,按提示设置安装目录及密码,按enter键安装在默认目录(一般为C:\Documents and Settings\username\.ssh\ 或者 C:\Users\username\.ssh)。key密码为空。注意,过程当中不要更名字,使用默认就能够。bash
1.2 到默认路径下面去找.ssh文件夹里面的id_rsa和id_rsa.pub文件。id_rsa.pub里面就是生成的SSH key。服务器
1.3 将id_rsa.pub文件发给GIT管理员网络
git config --global user.name "xxx"ssh
git config --global user.email "xxx@gmail.com"函数
git config –list工具
打开IDE,以下图,点击git,学习
输入git的地址开发工具
若是须要修改远端地址,在项目根目录,运行git bash 命令
git remote set-url origin git@192.168.0.158:java/sps.git git remote -v
使用git 和其余的vcs版本管理工具同样,天天上班先git pull,下班commit的习惯。而且每次commit以前,最好作一下git pull,这样产生的冲突会比较少。
下面就以平常最经常使用的命令,来讨论。
这个主要注意,从远端下载代码和本地冲突的状况,若是产生冲突,必定要仔细解决,避免误删别人的代码,其余的解决冲突都要遵循此原则:切记删除别人的代码。
及时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提交代码便可。
该功能至关好用,能够将本地修改,stash暂存本地工做环境,作其余的操做(修复主分支的bug),完成以后,在unstash恢复本地工做环境
屡次commit完成以后,须要将本地仓库同步到远程仓库,供团队其余成员使用。通常使用以下配置推送,
其中,push为默认选择,推送到远程,进行同步,force push 为强制本地版本覆盖远端版本,push tags将本地的tag push 到远端,这些操做都对应git bash中的命令,有兴趣能够本身查阅。
该命令是将其余分支的提交合并到当前分支,通常使用以下配置便可,
本地当前在dev 分支,这个操做是将master分支的全部提交merge到本地dev上,合并策略通常默认便可。
git pull –tags git push –tags git tag –d tag1.0