1. IDEA中Git的使用方式
1.1 在IDEA中配置git的安装路径。
使用的版本是ULTIMATE 2018.3。 配置git的安装目录,Mac系统可以使用系统自带的git即可。点击Test来测试已经配置好:
1.2 使用IDEA 创建项目并提交本地仓库
创建一个简单的java项目来测试提交本地仓库,点击 File -> New -> Module 来新建一个Moudle,注意配置路径步骤,将module放在项目根目录下。
创建一个简单的类作为测试。下面将项目提交到本地库。左键选中这个项目,按照下边的图示最终点击"Create Git Repository..."
在弹出框中,选好这个项目的目录:
选好了项目目录后,项目中的文件也相应的变为了红色(红色表示已经初始化好了本地库):
如果cd到这个项目的目录下,也可以看到.git文件夹,说明已经完成了git的初始化(git init的结果):
下面就需要提交文件到暂存区(git add [filename])和本地仓库(git commit -m "x" [filename]),在IDEA中,这2步是合成了一步完成的。右键我们的项目,按照下图选择"Commit Directory..."
选择要提交到本地仓库的文件,并键入注释信息,点击“Commit”按钮完成上传本地仓库。
1.3 IDEA指定忽略文件
在进行版本控制时,应该只提交开发的代码(.java文件),不能提交一些IDEA项目的配置文件.iml文件,因为不同开发人员的IDEA工具的版本会有差别,如果版本控制了这些工具配置文件,其他人员在pull文件时,如果拿下了iml文件会影响自身工具的配置,导致错误。
第一种方法,设置某些格式文件不显示:
第二种方法,是我选取的方法,将某种类型的文件,排除在VCS控制之外。
配置好了之后,显示后的内容不会放在VCS控制内,不会被提交。例如,下面的例子,将规定所有以iml结尾的文件将不在VCS控制下。
第三种方法需要安装.ignore插件。
访问下面的地址来下载插件:http://plugins.jetbrains.com/,选择要安装的插件来搜索,搜索出结果后,非常重要的是查看自己的IDEA的版本,选取对应版本的插件*。
1.4 推送代码到远程库
既然推送到远程库,首先需要先建立一个远程库,这里我以码云(https://gitee.com/)为例,其他Github,私服的Gitlab也是同样的。
先在码云上创建一个空的仓库:
创建好空的远程仓库后,复制HTTP链接备用,https://gitee.com/mjlsg/GitTestDemo.git。下面在IDEA中右击项目GitTestDemo1将其push到这个远程仓库。
在下一个窗口中点击 "Define remote":
下一步定义远程库的别名,下面窗口中,"Name"项是远程库的别名,URL是远程库的地址。
下面直接点击push完成整个“推送代码到远程仓库”的操作。
需要注意的是,在推送代码到远程仓库时涉及到用户密码管理、权限等诸多问题。IDEA可以记录用户名,密码这样可以防止每次在push时都需要输入用户名、密码,很麻烦。
但是,这里有一点需要特别注意,有时在记录用户名、密码时可能会出现Authentition的问题,这种问题出现的场景时,当多个用户共同开发一个project时,他们都需要从一个远程仓库地址来checkout,也需要push。这时,一定注意自己的用户和相应的权限是否符合要求。如果权限不符合要求,就会出现Authentition问题。
最后,经检验代码已经在远程仓库上,push成功。
1.5 IDEA克隆远程仓库项目到本地
克隆远程仓库项目,需要先获得要clone项目的HTTP地址。在IDEA中,按如下操作:
点击后,输入要clone的项目的HTTP地址和项目需要放置的位置,如下图:
上边的截图中,可以点击 "Log in to Github..."按钮,并设置其他托管平台的信息,不一定是Github。
下面简单设置一下IDEA工程的基本信息后,就可以新建一个project了。
1.6 IDEA拉取远程仓库项目
这里为了演示pull操作,在GitTestDemo项目(1.5节clone下来的project)做一次commit,并push远程库,以修改远程库代码。
回到GitTestDemo1项目,右键这个项目,按照下面操作进行点击"pull":
点击后,出现下边信息:
需要仔细说明下这些信息。远程库代码pull后,放到本地的"Git Root"项目路径。Remote是我们要pull的远程库的地址。"Branches to merge"表示,我们要拉取的是远程库的master分支,这里的origin是远程库的别名。点击pull后,更新后的代码就pull过来了。
1.7 解决冲突
Git冲突在下边情景中会产生,假如A和B两个人,同时修改了代码增添了不同的内容,当A已经push了远程库后,B再push远程库时就会有冲突,可能会覆盖A的修改。
下边例子,原始代码如下:
public class CommitRepository {
public static void main(String[] args) {
System.out.println("Commit project to Local Repository!");
System.out.println("第二个人更新代码");
}
}
A修改了代码,并push到了远程库,代码如下:
public class CommitRepository {
public static void main(String[] args) {
System.out.println("Commit project to Local Repository!");
System.out.println("第二个人更新代码");
System.out.println("3333333333333333");
}
public void test(){
System.out.println("From GitTestDemo Pro");
}
}
之后,B修改了代码,并准备提交,代码如下:
public class CommitRepository {
public static void main(String[] args) {
System.out.println("Commit project to Local Repository!");
System.out.println("第二个人更新代码");
System.out.println("444444444444444");
}
public void add(){
System.out.println("From GitTestDemo1 Pro");
}
}
可以发现B的代码与A的代码有区别,在main函数中,并且新增的方法也不一样,如果B push了自己的代码到远程仓库,会覆盖掉A的代码,导致错误。
B将代码Commit到本地仓库时,不会有错误。在push到远程仓库时,会出现错误:
遇到这种错误时,需要点击merge来解决冲突,通常B需要和A沟通后才能merge,以保证不影响A的功能代码。merge的内容在下边对话框中自己手动输入,以防止错误。
修改完中间的版本后,点击"Apply",就将自己的代码修改为中间的版本,再次操作Git -> push就可以完成最终的覆盖远程代码库的操作。
2. Git工作流
2.1 企业Git工作流
Git工作流通过为功能开发、发布准备和维度设立了独立的分支,也让发布迭代过程更为顺畅。严格的分支模型为大型项目提供了必要的结构。
在企业环境下,比较大的项目的分支会比较复杂,一般情况下,可以按照下边这个结果进行分支策略。
master分支:管理正在运行的生产环境代码。
2.2 测试实例
2.2.1 多用户准备
为了完成多用户协同开发的测试,需要多个码云用户,并在仓库层面添加用户。具体添加方法是登陆码云,在管理功能下,直接添加用户,操作流程如下:
邀请用户后,被邀请用户收到私信,被邀请用户同意邀请即可。
2.2.2 测试过程
项目GitTestDemo模拟程序猿用户,项目右键 -> Git -> Repository -> Branches ;
新建一个develop branch:
在代码中开发一些功能。
3. IDEA的常见配置:
下边总结了一些常用的配置,对于提高效率有帮助:
1.Preference -> Editor ,这两项可以勾选上。完成2个功能:(1) 滑轮改变字体大小 (2)鼠标滑过一个类时,显示这个类的信息。
2.设置自动导包。
在输入代码时,需要导入包,或者处理错误时,使用 Alt + Enter来处理。
3.设置显示行号和方法分隔符(将不同方法区分开来):
4.导入包时不区分大小写:
在java中输入代码stringBuilder时,IDEA默认不帮我们提示或是代码补充,但是如果输入了正确的StringBuffer就会进行代码提示和补充。去掉大小写检查勾选,让其都进行补充。
5.文件tab在多行显示,避免一行时隐藏文件tab标签
当打开的文件比较多时,默认情况下,IDEA会都在一行中显示,如果没地方会隐藏一些tab,这样用起来不方便。
6.配置新建类的注释模板,这样可以极大减少工作量。
一般地,在IDEA中,有以下常见的变量:
${PACKAGE_NAME} - 引用当前创建类时所在的包名
${PROJECT_NAME} - 当前项目名
${NAME} - 文件名
${USER} - 引用当前系统的登录用户名
${DATE} - 引用当前系统的日期
${TIME} - 引用当前系统的时分秒
${YEAR} - 引用当前系统的年
${MONTH} - 引用当前系统的月
${DAY} - 引用当前系统的日
${HOUR} - 引用当前系统的小时
${MINUTE} - 引用当前系统的分
可以根据自己的实际需求来配置,例如下边的配置模板:
7.全局设置文件编码方式
全局设置项目文件编码方式,代码中包含中文等字符时,设置这项有较大意义。
======== 返回目录 ========
《《《 上一篇 Stream API
》》》 下一篇 机器学习算法:回归理论