入职第一天,Git就把我难住了。
因为之前的公司没有用Git来管理代码,虽然底层原理都明白,但是一些拉取代码、上传代码的操作还是不太熟练。
尤其是Git的图形化工具用什么?Git怎么关联代码仓库?怎么处理冲突?
这些虽然都是小问题,但是我知道新公司不会给我时间去学习,他们是默认我都会的,所以这些都需要我一步步的去摸索,而且是用闲暇时间去总结。
这篇文章主要是针对没有使用过Git的朋友,入职新公司以后,怎么快速的掌握Git知识,怎么使用图形化代码管理工具去拉取代码、上传代码等常规操作。
首先说第一个:Android程序员,使用AndroidStudio自带的Git图形化工具即可,不需要去找第三方的图形化工具。
本文以GitLab作为仓库管理工具为例进行讲解。
一、开通GitLab仓库平台登录账号
入职以后,首先跟公司要登录GitLab平台的账号、密码和平台链接,保证自己可以用网页登录到GitLab平台。
二、开通代码访问权限
有了账号和密码只能让你能够登录代码仓库,但是此时你还没有权限拉取代码,需要公司管理员给你账号授权权限,才具备拉取代码的权限。
三、本地安装git
本地安装Git工具,Mac电脑一般都自带git,执行下面命令查看本机是否安装:
git --version
如果是Windows电脑,可以自己找教程安装git。
四、配置git信息,生成公私钥文件
因为后面拉取代码是通过git这个工具和GitLab平台进行通信,所以需要在本地配置一些验证信息,然后设置到GitLab平台上,便于平台识别用户。
这些信息就是公钥和私钥,私钥本地保存,公钥配置到GitLab平台,用来做身份验证。
1、通过下面命令配置全局用户信息:
- 设置gitlab的用户名(注意,这是设置的全局的,如果你有两个身份,要注意)
git config --global user.name "staticzh"
2. 设置gitlab的邮箱(注意,这是设置的全局的,如果你有两个身份,要注意)
git config --global user.email "staticzh@qq.com"
上面两个信息在提交代码的时候,可视化工具显示出来的你的信息,用户名和邮箱。
2、验证本地的身份信息
配置完以后,可以通过下面两个命令查看配置是否成功。
//校验全局身份信息
git config --global user.name
git config --global user.email
3、执行下面命令生成本地公钥
ssh-keygen -t ed25519 -C "你的邮箱" -f ~/.ssh/id_gitlab
上面的命令会在~/.ssh这个目录,生成名字为id_gitlab的公钥文件和私钥文件。
目录一般是固定的,文件名字可以自己定义。
执行完以后,会生成下面两个文件:
id_gitlab:私钥文件
id_gitlab.pub:公钥文件
五、将本地公钥配置到GitLab远程仓库平台
本地公私钥生成以后,需要将生成的公钥配置到GitLab平台,用于后面的信息校验。
1、执行下面的命令查看本地公钥
cat ~/.ssh/id_gitlab.pub
将返回的结果复制到剪切板。
2、配置到GitLab平台
- 登录GitLab远程仓库web页面,点击左侧的SSH Keys --> Add SSH Key,将复制的公钥复制到里面,然后点击add
- 测试是否可以连通GitLab代码仓库(如果没有其他问题,此时本地就可以和代码仓库通信了)
ssh -T <git@gitlab.dev..com>
注意:gitlab.dev.com为自己搭建的GitLab私有仓库的地址
- 如果执行了上面的命令返回如下信息,表示你已经可以成功连接到代码仓库:
Welcome to GitLab, 你的用户名!
六、从git上拉取代码
通过上面几步,你已经能够成功连接到GitLab代码仓库,使用git clone命令可以拉去代码啦!
七、git信息配置踩坑
注意上面配置git本地信息的命令:
git config --global user.name "username"
git config --global user.email "xxxx@yyy.com"
命令中都有一个global,意思是配置的全局的用户名和邮箱。
如果你只连一个git代码仓库,这样配置基本不会有问题,但是如果你要连多个远程代码仓库,就容易出问题了。
比如公司一个代码仓库,回到家以后自己在GitLab上也申请了一个代码仓库,为了区分,一般都会配置不同的用户名和邮箱,但是如果使用上面的global命名,两个仓库提交代码的时候,都会用它设置的用户信息。
为了解决这个问题,就要用到下面的命令
git config --local user.name "staticzh"
git config --local user.email "staticzh@qq.com"
执行上面的命令,只是把当前目录下的代码设置成了对应的用户信息,不影响其他目录。
所以可以把公司的信息设置成global,在自己项目代码目录设置信息设置成local,这样提交代码显示的信息就分开啦。
为了保险起见,可以在提交代码前,使用上面的命令查看下当前的用户信息。
//校验全局身份信息
git config --global user.name
git config --global user.email
//校验本地身份信息
git config --local user.name
git config --local user.email
AndroidStudio日常开发常用的git命令
Android开发一般使用AndroidStudio自带的Git图形化工具即可,下面说说一些常用的操作。
一、代码克隆
刚入职公司,上面的配置弄好以后,组长会甩过来一个文档或者一个git路径,让你下载代码、了解项目
使用下面的命令克隆代码:
git clone <仓库地址>
仓库地址是一个git@开头的url路径。
代码clone完毕以后,用AndroidStudio打开,AS就会关联上git了,AS的左下角会有一个git的图标
此时就可以进行常规的代码添加、提交、拉取、合并等操作了
二、AS工具中关于git的操作
为了方便新手,先介绍下AndroidStudio中使用git的几个地方。
1. 本地分支、远程分支的概念
在git log中经常会看到origin、master这样的分支描述,如下图,这是什么意思呢?
master,本地分支,这是一个存在本地电脑的分支,是日常进行代码修改直接操作的分支
origin/master,远程跟踪分支,代表的是远程服务器(通常是GitHub、GitLab等)上的 master 分支的状态,origin 是远程仓库的默认别名。所以 origin/master 的完整意思是:“名为 origin 的远程仓库上的 master 分支”
相当于本地电脑上的分支是远程分支的一个副本、快照。
HEAD,代表你当前代码所在的节点位置。
2. 查看git log的地方
git log即查看代码的提交记录、分支情况,在AS左下角的Git图标这里,也就是上面的那个截图,点击它弹出:
这里会显示代码提交记录,提交的信息和提交的人员、时间等。
3. 查看当前在哪个分支
AS右下角的位置会实时显示你所在的分支
如图,我当前是在master分支。
4. 提交代码的位置
在AS的左侧边栏有个commit的按钮,点击它弹窗:
在这里会列出git跟踪的所有的你修改的文件,可以在这里选择要提交的文件,编写msg,直接提交
我的使用习惯是在这里用Commit先提交到本地,然后点击左下角的Git图标,看看自己的提交情况,在一起推送到远端,一般不会再这里直接推送到远端。
5. 代码拉取和推送
AndroidStudio的顶部状态栏会有几个GIt的操作图标,如下:
向下的箭头:代表拉取远端最新代码并和本地代码合并。
向上的箭头:将提交到本地的代码推送到服务端。
我一般是在这里统一将本地的代码推送到远端的。
注意:向下的箭头点击的时候其实是进行了两步操作,一步是将远端代码拉取到本地,一步是将远端代码和本地代码合并。
日常开发的时候,有时候只想拉取一下远端的代码,查看同事的提交记录,后面本地逻辑写完了才会合并代码,这种情况就不能使用这里了。
要使用下面这个操作,路径:顶部Git按钮-->Fetch,如下图
点击Fetch以后,就可以在git log页面查看其他同事上传到服务端的代码,后面再进行合并。
6. 代码合并
当拉取了同事提交的代码,然后本地你的代码编写完毕以后,就需要和同事代码进行合并,然后合并完以后提交到服务端。
首先,先把自己的代码提交到本地,然后再git log页面会看到自己提交到本地的节点和远端同事的代码节点。
然后进行Merge,Merge以后,有可能出现冲突,AS会弹出三个框然你解决中途,中间的框是解决完以后的。
解决完以后,在使用上面介绍的Push到远端服务器即可。
7. 切换节点
在git log中选择要切换的节点,右键,找到“Checkout Revision”,点击它就会切换到对应的节点,如下图:
但是注意:切换到其他节点以后,虽然本地的代码变成了切换到的节点的代码,但是此时git记录的是一个分离头指针的状态,从两个位置可以看出来,如下图:
图中,黄色的标记右边有个感叹号,右下角表示分支的位置是遗传数字,这都代表当前是一个分离头指针的状态(detached HEAD )。
如果此时在本地修改了代码,是无法提交到任何分支的,会提交失败。
这个分离头指针的状态是,这个状态的意思是,当前你可以查看编辑代码、运行测试,但是无法将修改的代码提交。
如果想要提交代码,必须创建一个新分支,然后把修改的代码提交到新分支。
怎么提交到新分支呢?
1)先创建新分支,点击右下角的显示当前分支的位置,在弹框中选择New Branch,输入新分支名字:
2)点击Create就会自动切换到新分支,右下角的分支显示也变了,然后就可以正常提交当前修改的代码了,只不过代码都提交到了新分支中。
8. 切换分支
上面说了切换节点,如果要切换分支要怎么切换。
首先找到要切换的分支的最新节点,然后右键选择“Checkout”,如下图
但是,此时会有两个选项:测试分支、Checkout Revision
第一个,就切换到了你要切换的分支的最新代码,后面就可以正常开发,修改代码,提交代码了。
第二个,就是上面说的分离头指针的状态(detached HEAD ),此时虽然看着已经切换到了对应分支的最新代码,但是本地修改的代码无法提交,想要提交需要创建新分支。
明白了以上的操作,就知道git的一个设计原则:
老节点的代码只能查看,不能修改,如果想要修改就必须创建新分支,单独起了个名字叫:Checkout Revision(检出版本),只有最新的代码节点才能正在的切换过去,可以直接修改。
9. 合并分支
比如这里要把测试分支合并到main分支,首先要切换到main分支,然后右键测试分支的最新节点,弹出如下的弹窗,选择“Branch 测试分支”,再选择 Merge “测试分支” into “main” ,如果有冲突就提示解决冲突,如果没有冲突即合并成功。
合并完成以后,需要Push到远程服务端。
10. 查看本地下载代码的远程仓库路径
顶部GIt按钮-->Manage Remotes,如图:
不常用的一些Git操作
以上操作就是日常开发中使用次数最多的git操作,下面说几个不太常用,但是有可能会用到的操作:
2. git的储藏功能
这个功能和hg中的剥离功能一样,就是把本地修改的代码放到一个临时储藏区,然后本地跟踪的所有修改文件就没有了,就可以无冲突的更新远端服务器的代码到本地,当合适的时机的时候到了,可以把储藏区的代码恢复到本地。
这个主要是应对这样的场景:
本地修改了一大堆代码,但是还不想上传,此时有需求要更新远端的代码到本地,或者是更新之前节点的代码到本地临时打个包等,这个时候就可以先把本地修改的代码放到临时储藏区,当临时的要求处理完以后,再恢复到原来的代码节点,然后把储藏区的代码恢复。
注意:临时储存区的代码恢复的时候,本质上是临时储存区的代码和本地代码进行合并,有可能会出现冲突
AndroidStudio中储存功能如下:
选中项目右键--> Git --> Stash Changes...
会弹出下面的输入框:
Message中填写本次储藏的消息,为了方便当储藏的次数多以后查找,点击Create Stash以后,本地所有的修改就消失了,都放到了储藏区中。
Keep Index,这个不要勾选,我测试了下功能不要用。不勾选的意思是,本地所有的修改全部放到储藏区里。
然后是通过下面的方式恢复储藏区中的代码,同样是上面的操作:项目右键--> Git -- > Unstash Chages,即上面state路径的下一个就是,如上图。
点击以后就会弹出下面的页面:
上面会列出出每次储藏的Message,然后选择其中一个,下面会显示出储藏的代码,最下面有两个按钮:Apply、Pop。
Apple代表恢复储藏区的代码到本地,但是储存区的代码仍然保留。
Pop代表恢复储藏区的代码到本地,删除储存区的代码。
3. git的重置功能,即丢弃提交到本地服务器的代码
日常开发中会遇到这样的情况,修改的代码已经提交到了本地,突然发现需要撤回或者重新修改,此时就需要撤回本地的代码提交
注意:这个功能只能处理提交到了本地,但是未提交到远端的代码。
首选选中要恢复到的那个节点,右键--> Reset Current Branch to Here,如下图
然后会弹窗如下的弹窗:
有四个选项:soft、Mixed、Hard、Keep。
这四个选项的主要区别就一个,是否保留你选择的节点之后的所有Commit代码,Hard、Keep会直接丢弃,Soft、Mixed会保留之前的Commit到工作目录,就使用默认的Mixed就可以,点击Reset。
到此,关于Git的日常使用都介绍完了,了解了这些,应该能应付日常工作中的所有需求了。