1.初识Git
Git是一个分布式版本控制系统,主要用于协同开发和管理代码。它可以追踪文件的修改历史、记录每个版本的更改,并提供了分支管理、合并等功能,使得多人在同一项目中同时进行开发变得更加容易和高效。
Git被开发出来的初衷是为了更好地管理Linux内核,具有强大的性能和灵活的配置选项,而现在早已被广泛应用于全球各种大中小型项目中。
2.安装Git
1、Windows 系统下安装
访问Git for Windows 官网(https://gitforwindows.org/),点击直接下载,下载完成后双击安装包进行安装,之后一直点击“下一步”就可以完成安装了
2、Mac 系统下安装
只需要在终端中输入命令brew install git即可完成安装(前提是已经安装了Homebrew )
3. 创建代码仓库
如果使用的是Linux或Mac系统,就先打开终端界面;
如果使用的是Windows 系统,就从“开始”里找到Git Bash 并打开。
1、配置身份
首先配置一下你的身份,这样在提交代码的时候,Git就可以知道是谁提交的了。
命令如下所示:
git config --global user.name "Sun"
git config --global user.email "sun@gmail.com"
然后再输入同样的命令进行验证,只是不输入用户名和邮箱名
输出刚刚配置好的名字和邮箱即可完成
2、创建仓库
到要托管的代码目录中,输入
git init
即可完成创建代码仓库的操作
仓库创建完成后,会在demo项目的根目录下生成一个隐藏的.git 目录,这个
目录就是用来记录本地所有的Git操作的,可以通过ls -al
命令查看一下
如果你想要删除本地仓库,只需要删除这个.git 目录就行了。
4. 提交代码到本地仓库
在提交代码前,一般先会从仓库拉取一下最新提交的代码,确保代码最新不会冲突,第一次提交的话可忽略
git pull
在项目代码中,如果进行了修改,可通过以下命令查看修改的文件,如果是第一次新建项目的话,都是新增的文件
git status .
如果想要查看具体的修改内容,可以通过以下命令查看
git diff .
也可以这样直接指定文件路径
git diff app/src/main/java/com/example/playvideotest/MainActivity.kt
其中,变更部分最左侧的加号代表新添加的内容。如果有删除内容的话,会在最左侧用减号表示
tip:后面带.
表示它不会递归搜索子目录,只显示当前目录的文件状态。可快速定位最近的一次修改
确认好修改的内容无误后,可提交修改到缓存区
git add .
然后提交到本地仓库
git commit -m 'first commit' #-m 参数用于指定提交消息(commit message)
到这里已经其实完成了,不过如果有远程仓库的话,还要把推送到远程仓库对应的分支,后面会说这里可先做了解
git push origin master
Express
本地仓库和远程仓库的区别:
- 存储位置:
本地仓库是位于本地计算机上的一个目录(带.git
文件的工程目录),它包含了工程目录下的所有文件和版本控制信息。
远程仓库是位于远程服务器上的一个中央存储库,它用于与团队成员共享和协作。 - 访问权限:
本地仓库通常只有该计算机的用户可以访问和操作。它用于个人工作、版本控制和开发。
远程仓库可以由多个用户远程访问和协作。它用于团队协作、代码共享和备份。 - 分布式版本控制:
本地仓库是分布式版本控制系统的核心。每个开发人员都可以有自己的本地副本,可以独立地进行提交、分支、合并等操作。
远程仓库在分布式版本控制中充当中央存储库的角色,用于合并各个开发人员的更改以及管理共享的代码库。 - 协作和同步:
本地仓库可以通过使用 Git 的命令和工作流程进行提交、分支切换等操作。协作通常在团队成员之间的本地仓库之间进行,通过推送(push)和拉取(pull)代码进行同步。
远程仓库用于团队成员之间的代码共享和同步。开发人员可以将本地仓库中的更改推送到远程仓库,并从远程仓库拉取最新代码以获取其他人的更改。
总体而言,本地仓库用于个人开发和版本控制,而远程仓库用于团队协作、共享代码和备份。它们在存储位置、访问权限、协作和同步等方面有区别,但在 Git 的工作流程中彼此紧密配合,提供了强大的版本控制和协作能力。
5. 其他常用命令
1、撤销未提交的修改
tip:使用git add
命令后添加到缓存区后的文件就不能撤销了
#撤销当前目录下所有的修改,即恢复成原状
git checkout .
#也可以指定某一个文件撤销
git checkout app/src/main/java/com/example/playvideotest/MainActivity.kt
2、撤销提交缓存区的修改
#当前目录下
git reset HEAD . # HEAD表示当前工作目录状态和最新提交的重要指针
#指定文件
git reset HEAD app/src/main/java/net/jia/demo1/MainActivity.java
tip:执行git reset
命令后,再执行git checkout
即可恢复成原代码,但使用git commit
命令后提交到本地仓库后的文件就不能撤销了
3、查看提交记录
git log #全部提交记录
git log HEAD #当前分支的提交记录
git log 2960da5042b2dbf1abbb3691be1b18a6f446b844 #指定id提交记录
git log -1 #最近的一次提交记录
6. Git分支的使用
1、为什么要用分支?
分支是版本控制工具中比较高级且比较重要的一个概念,它主要的作用就是在现有代码的基础
上开辟一个分叉口,使得代码可以在主干线和分支线上同时进行开发,且相互之间不会影响。
应用场景:
在发布1.0 版本的时候建立一个分支,然后在主干线上继续开发1.1 版本的功能。当在1.0 版
本上发现任何bug 的时候,就在分支线上进行修改,然后发布新的1.0 版本,并记得将修改后的
代码合并到主干线上。这样的话,不仅可以轻松解决1.0 版本存在的bug ,而且保证了主干线上
的代码也已经修复了这些bug ,当1.1 版本发布时,就不会有同样的bug 存在了
2、查看分支
git branch #查看本地分支
git branch -r #查看远程分支
git branch -a #查看远程和本地分支
当没有创建任何分支的时候,只有一个主分支master,即主干
3、创建分支
git branch version1.0
在master主分支基础上,创建了一个version1.0分支,此时两个分支的代码一样
4、切换分支
git checkout version1.0
当前所在分支可以在项目名后面看到,或者使用git branch
查看分支,绿色名且左边带
*
号的分支即当前所在的分支
5、合并分支
git checkout master #切回主干
git merge version1.0 # version1.0分支的修改合并到主干
tip:合并之前分支修改的文件一定要先提交,且主干那边对应的地方不能有新的修改,否则会代码冲突
6、 删除分支
git branch -D version1.0
7. Git的远程仓库 GitHub
使用场景:
所有版本控制工具最重要的一个特点就是可以使用它来进行团队合作开发。每个人的电脑上都会有一份代码,当团队的某个成员在自己的电脑上编写完成了某个功能后,就将代码提交到服务器,其他的成员只需要将服务器上的代码同步到本地,就能保证整个团队所有人的代码都相同。这样的话,每个团队成员就可以各司其职,大家共同来完成一个较为庞大的项目
接下来以GitHub为例,将项目代码托管到GitHub上
1、创建版本库
在https://github.com/官网注册好账号后登录,这里不过多介绍,如果打不开GitHub官网的话,可以参考一下这个教程
然后填写好相关信息
这是创建好之后的仓库
2、下载代码到本地
这是远程仓库的地址,复制之后,在工程目录下,执行
git clone https://github.com/Sunshine0069/Sunday.git
3、代码推送
推送到远程仓库只是在本地仓库提交代码的方式的基础上多了一个命令
git push origin main //推送代码到主分支
git push origin version1.0 //推送代码到子分支,在哪个分支上修改就推送到哪个
可以直接跳过git commit
直接执行git push
吗?
执行 git commit 的目的是为了确保您的更改被记录在本地仓库中,并生成一个唯一的提交标识符(commit ID)。这样,其他团队成员或其他计算机上的工作区就能够获取并查看您的修改。
也可以直接执行 git push 命令,但只有当您没有进行任何修改或没有执行 git commit 的情况下,Git 才会通过 git push 命令直接将本地的分支更改推送到远程仓库。否则,您仍然需要先执行 git commit 将本地修改保存到本地仓库,然后再执行 git push 推送到远程仓库。
Express:
除了Github外,还有一些很优秀基于Git的代码托管平台和工具,这里做个简单的了解
1、基于Git的代码托管平台
-
GitHub:GitHub 是一个基于云的代码托管平台,也是全球最大的开发者社区之一。它提供了源代码托管、协作开发、问题跟踪、版本控制、发布管理等功能。GitHub 也提供了一套强大的社交功能,以促进开发者之间的协作和知识共享。
-
Gitee:Gitee(码云)是中国的一个 Git 代码托管平台,类似于GitHub,为开发者提供了代码仓库托管、团队协作、持续集成等工具和服务。Gitee 也提供了许多用于中文开发者的定制功能和社区支持。
-
GitLab:GitLab 是一个完整的集成开发平台,它基于 Git 提供了代码托管、持续集成/持续部署(CI/CD)、项目管理、问题跟踪、协作和代码审核等功能。GitLab 可以部署在本地或云端,为开发人员提供了终端到终端的软件开发生命周期支持。
2、基于Git的代码审查工具
- Gerrit:Gerrit 是一个基于 Git 的代码审查工具,提供了一个独立于版本控制系统的代码审查平台。Gerrit 深度集成了 Git,并提供了审查、评分、评论、合并和权限控制等功能,以协助开发团队进行代码审查和合并操作。
…
8. AS中使用Git
tip:不搞安卓的可以忽略
首先用Android studio 新建一个Android项目,用之前的demo项目也可以,不过要把.git
文件给删掉
建好之后文件结构如图所示,这时你会发现目录有个.gitignore 文件
1、设置忽略的文件
Git提供了一种可配性很强的机制,允许用户将指定的文件或目录排除在版本控制之外,它会检
查代码仓库的目录下是否存在一个名为.gitignore 的文件,如果存在,就去一行行读取这个文件
中的内容,并把每一行指定的文件或目录排除在版本控制之外。注意,.gitignore 中指定的文件
或目录是可以使用“*”通配符的。
Android Studio 在创建项目的时候会自动帮我们创建出两个.gitignore 文件,一个在根目录下面,一个在app 模块下面。
根目录下的.gitignore 文件
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties
app目录下的.gitignore文件
/build
可以自己修改
/build
/src/test
/src/androidTest
2、下载GitHub仓库代码到本地
git clone https://github.com/Sunshine0069/Sunday.git
tip:这里只是下载好代码,并没有建立好远程仓库,所有的代码都保存在Sunday目录下,要把这个目录下的文件覆盖掉原来的文件才算完成
3、建立好git仓库
我们需要将这个目录中的文件全部复制粘贴到上一层目录中,这样就能将整个
工程目录添加到版本控制中去了(.git 是一个隐藏目录,在复制的时候千万不要漏掉。)
另外,上一层目录中也有一个.gitignore 文件,我们直接将其覆盖即可。
复制完之后可以将该Sunday目录删除,最终工程的目录结构应该如图所示
可以看到项目工程目录后出现main主分支,这样就在Android项目下建立好Git仓库了
Express
1、如何避免代码冲突?
git使用中最容易出现的问题就是拉取/提交时代码冲突,即同一处地方能有多次不同的修改,比如远程仓库那边有人修改了a位置的代码,而你在a位置再改提交的时候就会发生冲突,当然改了没提交直接拉远程仓库那边也会发生冲突,所以
提交之前一定要先git pull
拉一下代码
2、AS中git的图形化界面的使用
最后说一下在Android studio中,可以直接使用图形化界面使用Git,在AS右上角有三个按钮
从左到右分别对应以下命令
1、git pull
2、git add . & git commit -m '左边会弹出一个框框填修改的描述'
3、git push origin master
tip:第一次使用的话会弹出来窗口,需要打开网页然后授权一下Github就好了
文章参考书籍:郭婶 《第一行代码 第三版》