Android程序员工作中怎么使用Git参与开发

69 阅读13分钟

入职第一天,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、通过下面命令配置全局用户信息:
  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平台
  1. 登录GitLab远程仓库web页面,点击左侧的SSH Keys --> Add SSH Key,将复制的公钥复制到里面,然后点击add

 

  1. 测试是否可以连通GitLab代码仓库(如果没有其他问题,此时本地就可以和代码仓库通信了)

ssh -T <git@gitlab.dev..com>

注意:gitlab.dev.com为自己搭建的GitLab私有仓库的地址

  1. 如果执行了上面的命令返回如下信息,表示你已经可以成功连接到代码仓库:
    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记录的是一个分离头指针的状态,从两个位置可以看出来,如下图:

image.png

图中,黄色的标记右边有个感叹号,右下角表示分支的位置是遗传数字,这都代表当前是一个分离头指针的状态(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的日常使用都介绍完了,了解了这些,应该能应付日常工作中的所有需求了。