随笔
Git介绍
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git组成部分:
SVN是集中式的,Git是分布式的。集中式就是所有的代码都存储在中央服务器,分布式就是每台电脑都是中央服务器。
使用Git分支开发流程
从一般开发者的角度来看,git有以下功能:
- 从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
- 在自己的机器上根据不同的开发目的,创建分支,修改代码。
- 在单机上自己创建的分支上提交代码。
- 在单机上合并分支。
- 把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
- 生成补丁(patch),把补丁发送给主开发者。
- 看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
- 一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。
从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能:
- 查看邮件或者通过其它方式查看一般开发者的提交状态。
- 打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
- 向公共服务器提交结果,然后通知所有开发人员。
日常开发流程:
Git安装配置
本地下载安装
公司内可能会把Github封掉了,所以使用淘宝提供的镜像下载
下载地址:http://npm.taobao.org/mirrors/git-for-windows/
安装方法参考:https://www.cnblogs.com/wj-1314/p/7993819.html
远程仓库配置ssh密钥:
- 打开本地Git Bash
设置Git的user name和email:(如果是第一次的话)
$ git config --global user.name "1805xxxx"
$ git config --global user.email [1805xxxx@cnxxxx.com](mailto:1805xxxx@cnxxxx.com)
- 创建 SSH Key
$ ssh-keygen -t rsa -C [1805xxxx@cnxxxx.com](mailto:1805xxxx@cnxxxx.com)
连续3次回车,在C:\Users\1805xxxx.ssh 目录下最后得到了两个文件:id_rsa和id_rsa.pub,其中id_rsa.pub就是需要配置到远程仓库的公钥,打开复制ssh-rsa这段代码,再进入远程Git仓库进行配置。
- 远程Git仓库配置
创建远程Git仓库
公司GitLab地址:http://opensource.cnxxxx.com/ (公司内网)
首先新建一个Git仓库:填写项目名称和项目描述,可见等级根据自己需求定义。
新建项目
项目管理
本地IDEA使用Git
先测试本地环境Git是否安装成功,在设置里找到Git—Test
工作开始前都先把代码从github库上拉取下来,更新自己的代码,避免别人修改过的代码与自己的有冲突,必须要养成这样一个良好的习惯。
clone
拿到git路径,打开IDEA,选择Checkout form Version Control,检出仓库到本地:
在URL中输入git地址,点击Test进行测试连接,下边Director选择自己的工作空间,连接成功后,点击Clone按钮,即可将远程仓库克隆到本地。
.gitignore
按照规则忽略文件
安装.ignore插件,配置.gitignore文件
安装完以后可以看到与规则匹配的文件都变成灰色了,即使修改了也不会被提交。
add
在项目中新建文件的时候,IDEA会询问是否将该文件加入版本控制,如果选择了是,那么就相当于执行了add命令,文件名会变绿色,如果选择了否,那么文件名会变红色,未加入版本控制。
新建文件时,未加入版本控制:
选择Yes,加入版本控制,文件名会变绿色:
commit
进行文件的提交,提交文件后,可以在IDEA提供的版本控制里边查看当前分支开发情况:
localMaster为我自己本地建的分支。origin/master为远程主分支。
这个时候,只在自己本地仓库存在该文件,远程Git仓库并不存在。
fetch
比如这个时候有人在该package下提交了另外一个文件,并提交到了远程仓库,远程仓库多了RemoteGitTest.java文件,但是并不影响本地。如果要同步远程仓库的代码,需要使用fetch命令。
该命令会将远程仓库的代码同步下来,但是并不会合并。
可以看到最左侧为主分支,然后自己的本地分支突出来了。
pull
pull和fetch命令都是从远程仓库拉取代码,但是fetch相当于是从远程获取最新版本到本地,但不会自动merge。pull是会自动fetch,并且merge代码。
如果需要有选择的合并git fetch是更好的选择。效果相同时git pull将更为快捷。
merge
现在本地仓库和远程仓库有了不同,为了提交代码,必须先将代码进行合并,在IDEA右下角,是有当前分支的名称的,可以快速进行切换自己的本地分支。
切换到本地的主分支,然后点击远程分支,选择Merge into Current,将远程分支合并到本地。这样,该分支就是包含远程代码的最新代码。
合并后,如果有冲突需要解决冲突,最后在控制台可以看到如下:
继续修改本地文件,可以看到现在就在一个分支上了。
push
合并完代码后,现在代码都是存放在自己的本地电脑中的,其他人并看不到,所以需要推送到远程仓库,让所有人都看到。
点击push后会出现Push Commits的窗口,里边都是自己本地仓库的提交记录,右侧是修改过的文件,点击下边的Push,即可推送到远程仓库。
推送完成后,在IDEA右下角会显示推送成功的消息:
然后看本地控制台:标签都到了同一位置,说明本地与远程代码保持了一致。
branch
有时候会接到多个开发任务,但是这多个开发任务修改的是不同位置的代码,这个时候可以快速拉取多个分支,然后分别完成不同的开发任务。
选择某一个分支,点击checkout As... 意思是从远程分支拉取一个新的分支
我这里拉取了一个test分支
点击ok,右下角自动给你切换到test分支,并且本地分支栏也多了test分支
如果想切回其他分支,只需要选中其他分支,然后点击Checkout即可快速切换到另一个分支。两边修改的代码互不影响。
以上就是在IDEA中快速进行分支开发。
SourceTree进行Git管理
SourceTree只是通过UI的方式来方便进行版本管理,实际上和使用Git Bash写脚本命令一样就,增加了交互式界面,操作也更安全些。
1.下载sourcetree
https://dl.softmgr.qq.com/original/Development/SourceTreeSetup-3.2.6.exe
下载后安装默认安装,需要修改一些文件,才能跳过验证,破解安装,步骤如下:
- 初次启动sourcetree
会在个人目录生成 C:\Users\1805xxxx\AppData\Local\Atlassian,注意你的个人目录
如果看不到是因为AppData是隐藏文件夹
- 关闭sourcetree安装验证
C:\Users\1805xxxx\AppData\Local\Atlassian\SourceTree下创建名为accounts.json的文件
[{
"$id": "1",
"$type": "SourceTree.Api.Host.Identity.Model.IdentityAccount, SourceTree.Api.Host.Identity",
"Authenticate": true,
"HostInstance": {
"$id": "2",
"$type": "SourceTree.Host.Atlassianaccount.AtlassianAccountInstance, SourceTree.Host.AtlassianAccount",
"Host": {
"$id": "3",
"$type": "SourceTree.Host.Atlassianaccount.AtlassianAccountHost, SourceTree.Host.AtlassianAccount",
"Id": "atlassian account"
},
"BaseUrl": "https://id.atlassian.com/"
},
"Credentials": {
"$id": "4",
"$type": "SourceTree.Model.BasicAuthCredentials, SourceTree.Api.Account",
"Username": "",
"Email": null
},
"IsDefault": false
}]
- 修改user.config
然后在进入C:\Users\1805xxxx\AppData\Local\Atlassian\SourceTree.exe_Url_dbhf2dawcrrrvxjjwvb2mxghqxuehspc\3.2.6.3544
修改user.config内容,增加下面代码:
<setting name="AgreedToEULA" serializeAs="String">
<value>True</value>
</setting>
<setting name="AgreedToEULAVersion" serializeAs="String">
<value>20160201</value>
</setting>
4.再次启动安装程序
默认安装,跳过了注册界面,由于我们将使用git客户端,因此选择我不想使用Mercurial即可。
配置SourceTree
配置token
之后就可以开始项目开发版本管理了,例如开始拉取一个项目,注意一般开始使用dev分支,确认没问题的代码才会合并到master上
clone
就可以把远程Git仓库下的项目克隆岛本地就行管理了,其他具体用法可以参考网上的教程。
以上就是Git的安装和使用的一些记录。