Android Git之旅

简介: Android Git之旅

前言


 作为一个程序员,你保存代码的方式是什么?更新代码的方式是什么?你还在用拷贝的方式保存代码吗?U盘?移动硬盘?还是网盘?


正文


 以上的一些方式你可能在刚开始学习或工作的时候会用到,但不是长久之计,因此你需要学会使用git。git的用法虽然不难,但是精通不易,如果不是经常使用,容易看了就忘记,特别是一些指令的使用,这里做一个记录,从头开始了解git。


一、安装Git


 点击Git进入官网。

0633bd285a0d41309b01a8b3e2148dc2.png


 官网会根据你的电脑系统为你推荐最新的Git版本,这里你会看到2.37.0,Windows安装版本,点击Download for Windows进入下载页面。

0ce4b50b1f554a04b980870b696b1e38.png


 点击下载符合你电脑的.exe程序,我是windows11,我下载的是64-bit Git for Windows Setup,下载过程慢慢等待即可。下载好之后双击exe进行安装,安装过程没啥好说的,前面一顿点击Next,碰到Install点击即可。安装完成之后我们在Android Studio中配置Git。

9ebf8afc2bd044ff91d985f073721fc2.png


 点击Android Studio导航栏File → Settings → Version Control → Git ,然后点击文件夹图标选择Git安装路径下的git.exe,之后点击Test,会出现你所安装的Git的版本,表明你安装的Git没有问题,配置完成。


二、准备工作


 为了方便演示,我们通过Android Studio创建一个项目来进行git的了解,创建一个名为GitStudy的项目。

19102c7571834b6fbd51bd8d818d2347.png


 创建好之后就可以开始提交代码了,我们需要确认提交代码的平台,目前最火热的当然是GitHub(有时候访问不了,可能需要翻墙),然后是Gitee(码云,稳定)、GitLab。


GitHub


Gitee


GitLab


 你要在那个代码托管平台保存自己的代码就去那个平台注册账号。


 作为开源爱好者,我选择的是GitHub,账号注册这些环节就没有啥好说的,下面要做的就是把代码提交的GitHub上。那么我们可以在Android Studio中配置我们的Git账号,点击导航栏File → Settings → Version Control → GitHub。

eb49a68e8bb444898cde6ef752769c2a.png


 点击Add account进行账号添加,会出现一个弹窗。

8c4f80611d3f40808a3f183cdac5e574.png


 这里我们选择使用使用Token进行登录,点击 Log In with Token…,会出现一个弹窗。

84cd33f3737541e8a50692edc1fb57bb.png


 这里我们需要输入Token,点击右侧的**Generate…**按钮去GitHub中构建Token。

218816127f2547d98af1ff8a66638a9d.png


 这里需要你验证一下,输入密码之后点击Confrim password。身份验证通过之后进入Token创建页面。

f474003a67754130b39392917756e1f6.png


 这里Token的有效期是30天,你可以设置时间更长,其他的地方不用设置,滑动到页面底部。

68758e94bd3c4dada6b3d52eef5ebecf.png


 点击Generate token按钮,Token的创建好了。

b71681dc5efc43cf8a443a2d58833376.png


 点击右侧的复制按钮,将Token复制一下,然后再回到Android Studio中,将token粘贴到输入框中。

e5592d364d10405497dd57e058ec3a81.png


 点击Add Account即可完成GitHub账户添加,添加后就能看到账户的信息。

9c691d5fbc554b22ad3a1ae063623e75.png


 点击弹窗右下角的Apply进行账户应用,此时右上角的Reset就会消失,再点击OK关闭弹窗。


三、旅行开始


首先看一下我的GitHub主页。

e87864409c544c03bd20c6dacda2a9f4.png


 现在是91个代码仓库,下面我们来提交第92个。首先我们在GitHub上创建一个新的仓库。

df72fdfeee994f2488285b4b445be80e.png


 这里输入仓库的名称和描述,勾选Add a README file,这会在创建仓库的时候添加一个README.md文件,这个仓库默认是public公有的,表示任何人都可以看到,private则是私有的,仅自己和仓库成员可见。然后我们滑动到页面底部,点击Create repository 按钮,完成仓库的创建。

72cb840edb1e4632abfa2bd02fce1f3a.png


 仓库创建成功,现在里面就只有一个md文件,下面我们要将自己的项目代码提交到这个仓库中。


 回到我们刚才创建的项目,点击Android Studio底部导航栏的Terminal。

58973e11896243fca50e72fa89fb4eb1.png


会自动进入当前项目的所在目录。


 要提交代码首先需要创建一个本地代码仓库,有这个仓库才能去提交代码。


① git init

git init


在输入前我们先看一下当前项目的文件夹。

19e220a8d089477493fe8c53c283b815.png


下面在Terminal中输入git init 然后回车,如下图所示。

bdadaa7912e64c12beffd0fa5ee873af.png


 初始化一个空的git仓库,此时你会发现你的项目的文件夹下多了一个.git文件夹。

f2a1dd824a4647d4828d3d81c1d0cfb8.png


它是一个隐藏文件,如果看不到,就需要设置一下查看方式。

2886c535a0004c50be82a863ee64a700.png


② git add .


然后我们需要将所有的文件拷贝到暂存区。

git add .


 通过这个命令就可以提交当前目录下所有的文件,注意这个命令后面有一个点,不要省略空格。在Terminal中输入git add .然后回车,如下图所示。

6b0059fcd53541e2b24d8a06d9642cf3.png


 这里就是把所有的文件添加到git中,你会发现你的MainActivity.kt这个文件名的颜色变成了绿色,这也是一个小细节,如果你看到的是红色,那么你在重新打开一下看看,就会变成绿色,有时候Android Studio的检查机制没有那么及时。


③ git commit


 文件添加到暂存区之后,我们就可以将暂存区内容添加到本地仓库中。

git commit -m "第一次提交"


 这个命令稍微有一些长,在 Git 中,每次提交代码,都要写 Commit message(提交说明),否则就不允许提交。上面代码的-m参数,就是用来指定 commit mesage 的。你得让别人之后你这一次提交的代码是什么意思,当然也方便你以后查询。


 下面我们在Terminal中输入git commit -m "第一次提交"指令,然后回车,如下图所示。

1bbd27562fb443cd9e9446a1b54e10bd.png


 失败了,为什么呢?因为在执行这一步时需要知道提交的人是谁,另外这个信息里面也告诉你该怎么做了。


 我们需要输入这两条指令,一条设置邮箱,一条设置名称。


 例如我的邮箱是lonelyholiday@qq.com,名称是llw。


④ git config

git config --global user.email "lonelyholiday@qq.com"


git config --global user.name "llw"


 下面在Terminal中就可以这么输入,先输入第一条,然后回车。

aae433c6347a43a79b866bb92d966742.png


 再输入第二条,然后回车。

7e6e905a66ca4b199bbfcdf3fa77494a.png


 你会发现似乎没有什么变化,实际上变化是有的。怎么查看这个变化呢?


通过

git config --global user.email


git config --global user.name


 这两条指令和之前的区别就是没有设置值,下面我们执行回车看一下有什么变化。

dd4cc69d144943dc9b6dfecd46f5c8d1.png


 这个变化是很明显的,现在解决提交人的信息问题,我们继续执行之前的未完成的git commit指令。


 你有没有觉得每一条命令都要一个一个的敲很麻烦,实际上你刚才敲过的指令可以通过键盘的上下键进行切换,试试看吧。


 现在我切换回git commit -m “第一次提交”,再回车一次。

6d8a9e9ae79f4346b7703176c2a13587.png


 这一次执行成功了。

⑤ git remote


 因为要提交到GitHub中创建GitStudy上,所以我们需要将本地仓库提交到远程仓库并关联。关联需要一个重要的内容那就是远程仓库的地址。

daa66812df344d6ba17d62c894615154.png


 复制仓库地址之后需要通过一个命令去关联。

git remote add origin "https://github.com/lilongweidev/GitStudy.git"


 这里的仓库地址请使用自己的,你用我的肯定是提交不上去的,在Terminal中输入指令,回车。似乎没有打印什么内容,但是指令已经生效了。


⑥ git push


 最后推送上去

git push origin main


 上面命令表示,将本地的main分支推送到origin主机的main分支。如果main不存在,则会被新建。这个main是从哪里来的呢?

146a5cc5997048a3bff0e55be13d2bec.png


 推送之前要注意推送的分支是哪一个。在Terminal中下面执行命令,回车。

137d650abf074ee0914d2954509fca58.png


 然后就报错了,这里的报错是因为分支不同。


⑦ git branch


 通过命令来查看当前的分支,

git branch


 在Terminal中输入指令回车,来看看有什么不同。

6faf24e4793c4f1ca32c8d3f2f439673.png


 原来本地的分支默认是master,而GitHub上创建的分支默认是main。分支需要统一,所以将本地的master改成main。

git branch -m master main


 在Terminal中执行这个命令,回车。然后再查看当前分支,确认有没有改成功。

8b59a0d5a05b4af7b8b822a858b34ece.png


 这里改好了,那么我们再来push。

4a3699d79fd04d398acde13faf3cceab.png


 哦豁,又有问题!是不是很烦呢?这是连接重置,国内访问GitHub有时候会这样,再来一次,我的原则就是不服输。

7b44dcf9b8b2474da42cd393520557fd.png


 人麻了,又报错了,这个错误还有一点不太一样,这个错误的根源在哪里呢?经过我的百度了解之后,预测是远程仓库里面的README.md文件导致的,我们这样提交代码,可能会导致它丢失。这个颜色的字体是警告,我们无视它,执行。

git push --force


 再回车看看。

4757ff1427a943d49278d61bfb6251db.png


 没想到吧,还是不行,为什么不行呢?百度上说是因为本地当前分支没有和远端的分支进行相关联。但是我之前明明关联了,那么这又是闹哪样呢? 难道是改了本地分支名的原因吗?


 这里其实还有一句话,告诉我们需要关联的执行下面这一行指令。

git push --set-upstream origin main


试试呗。

9e0e8f4b2510451eb077bed95c26f135.png


 还是没有什么用,现在是不是心态崩了呢?莫慌,再尝试别的方式。


⑧ git pull


 刚才我们一直是提交,但是因为远程仓库里面有一个README.md导致本地库和远程库有差异,所以我们反向操作一下,先把远程库的内容拉取到本地,试试看。

git pull --rebase origin main


执行

6a9f830b8a0645e2bea462821236c9d1.png


 拉取成功了,我们再提交看看。

git push origin main


296128b8aa90442ea16587864d1e1bd3.png


 妈耶,终于成功了!我们看看GitHub上,这个库有没有变化。

617d9ec1308a4bb193a79b61acf5c44d.png


 来人,奏乐,这不得庆祝一下吗?嗯?


 现在代码提交成功了,那我们修改一下AndroidStudio中的代码,然后再提交一次看看,这也是我们下班关闭电脑前要做的事情,保存代码。例如我们刚才写的指令都写到README.md中,代码如下:

# GitStudy
Git学习
git init 
git add .
git commit -m "第一次提交"
git config --global user.email 
git config --global user.name 
git remote add origin "https://github.com/lilongweidev/GitStudy.git"
git push origin main
git push --force
git push --set-upstream origin main
git branch
git branch -m master main
git pull --rebase origin main
git push origin main


974a1c164bdc49729fc561f40774e919.png


你看到这个README.md文件名称变成了蓝色,这说明文件有改动,提交的时候就会把这个改动提交上去。


这里只需要先后执行。

git add .


git commit -m "修改README.md"


git push origin main


既可,如图所示:

16528379ca8c42e3a556ac9cbee71b13.png


我们再看看GitHub上的变化。

da5eea9f5c314e93bbeecb03206273ca.png


 这个文件提交上来了,有时候我们会去查询之前提交的内容。


⑨ git log


 可以通过git log进行查询。

git log


 在Terminal中执行,回车。

e1afb5334d6442f2bc2db9ccefee32e9.png


 注意看,这里的修改记录是按时间排序的,最近的一次修改在最上面,也就是修改修改README.md。


如果要查询当前最新的commit呢?


⑩ git show

git show


执行回车

dce3c96f7a9c46b9b372e9bfa428791c.png


 这里就是查看当前最新的commit,这个日志中带有 绿色 + 号的表示是本次提交中新增的内容,我们滑动到最底下,你会看到光标没有结束,回车一下。

1ad872d7c33247f2a7ba860d826453b1.png


 这里会看到我们的提交内容,你注意看,@@ -1,2 +1,29 @@表示之前是第1行到第2行,现在是到第29行。你就一直回车,直到看到End。

5c00b25e6351487980635828454f2299.png


如果不需要查看了。

a0cd102ceda74695b23ed363471940e6.png


点击左上角的关闭按钮,关闭Local窗口。


 有时候有这种情况,我们提交了一个commit之后发现好像还漏掉了什么内容,比如请求动态权限时忘记在AndroidManifest.xml中注册静态权限了,这时候我们需要将之前的commit改成本次的commit。也就是合并commit,我们来演示一下。修改一下MainActivity中的代码,如下所示:

class MainActivity : AppCompatActivity() {
    private val requestCamera =
        registerForActivityResult(ActivityResultContracts.RequestPermission()) {
            Toast.makeText(this, if (it) "权限授予" else "未授予", Toast.LENGTH_SHORT).show()
        }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        requestCamera.launch(Manifest.permission.CAMERA)
    }
}


 这里的代码很简单,就是动态权限的申请。这种运行起来肯定是不会请求权限的,因为你没有注册静态权限,所以连那个询问用户权限是否开启的弹窗都不会出现,但是我们现在需要提交了。

4a2671e3a4ef4b7dafe0bc363f930331.png


 这时候我们发现没有注册静态权限。现在去AndroidManifest.xml中注册静态权限。

<uses-permission android:name="android.permission.CAMERA"/>


⑪ git commit --amend


执行

git add .


git commit --amend -m "添加静态权限。"


c34d4cc207474770988909593636da17.png


然后推送上去。

be555f187a8f4abab65a67775ee67225.png


再查看commit日志。

07e005b0c3114ee49987c632b172167e.png


这样就避免出现两次commit了。


 有时候我们开发项目,会有多个环境的项目,例如正式版,测试版,通常用不同的分支进行管理,现在我们只有一个main分支,那么我们可以通过命令去创建分支。首先我们会用到创建分支的指令。

git branch develop


 这里的develop就是我们要创建的分支名称,意思是开发,下面执行一下,然后再查看分支。

4ba5f5d2d6a441d49ca49887cccfd773.png


 可以看到这里有两个分支了,你会发现main分支前面有一个*号,同时是绿色的,这表示当前分支。


⑫ git checkout


 那么如果要让develop变成当前分支呢?


执行

git checkout develop


然后我们再查看所有分支。

345a9aa412004641b47bcd882f7af275.png


 切换成功了,不过develop分支还没有内容的,为了让develop和main分支的内容不一样,我们com.llw.gitstudy包下创建一个ToastUtils.kt文件。


然后你会看到弹出一个窗口。

141681085f6c4f78bc8dfd563bf8f352.png


 就是在询问你,是否要将此文件添加到git上,你会发现此时文件名是红色,当你点击了Add按钮就会变成绿色,如果你不希望每次创建文件时都询问你,就选中弹窗左下角的Don‘t ask again即可,现在我们点击Add。


然后我们在ToastUtils中写入如下代码:

import android.content.Context
import android.widget.Toast
fun String.showToast(context: Context) =
    Toast.makeText(context, this, Toast.LENGTH_SHORT).show()
fun String.showLongToast(context: Context) =
    Toast.makeText(context, this, Toast.LENGTH_LONG).show()


然后我们在MainActivity中使用它。

private val requestCamera =
        registerForActivityResult(ActivityResultContracts.RequestPermission()) {
            if (it) "权限授予" else "未授予".showToast(this)
        }


下面我们将刚才所写的代码提交,还记得是什么指令吗?

9c6fc5a308f8475595e7e3aaa802079a.png


最后我们推送当前的develop到服务器上,推送的时候可能会出现。

c3bc7162280e4e9f9d311698e49c3f01.png


这样的异常,没事的,多试几次,总能推送上去,实在不行就更换网络再尝试。

0371d31cf5d44039bf678649b5dd66ac.png


 这里我们就推送上去了,可以看到当服务器上没有这个分支的时候就会创建这个分支,下面我们去GitHub上看看。

6583fd92f3db48dabd816650023353ae.png


 分支提交成功。现在服务器加上本地就有四个分支了,我们可以通过命令查看一下。


执行

git branch -a


a689790fda7843ab905aa57315fe17f0.png


-a就是-all,表示全部。红色的就是服务器上的分支,四个分支没错。


 现在develop分支代码和main分支不一致,当我们在develop分支中验证代码没有问题之后,将它合并到main分支中,首先要切换分支到main。

git checkout main

084e2abcf7a04675874167ee6d906203.png


切换成功,下面进行合并


⑬ git merge

git merge --no-ff develop


–no-ff 在这的作用是禁止快进式合并。

1a8905e0068148dc8302415bfabdf4fd.png


然后打开GitHub,切换到develop分支,你会看到

35f14a82aefd4674aafcaa5c2a887b58.png


点击Contribute会出现一个弹窗。

b3ec763c6164439db0b68e953bdafc5f.png


 点击左边的Compare表示比较代码,点击右边的Open pull request表示同意这一次的分支请求,因为我已经知道我在develop中添加了什么内容,因此就无需比较了,直接点击右边Open pull request 。

de3b8c2b9bf44248a8ddf2b63436037e.png


添加描述后点击Create pull request按钮。

1462d54822044e8793289819d36f574e.png


 由于之前操作过快,忘记截图了,所以这里我回退了一下,重新搞了一次,上面的Test不重要,你注意下面这个Merge pull request按钮,点击它。

39d730faa56f416eb49b9945c672bd30.png


再点击Confirm merge。

591663bfbfa44d52927731371ada4462.png


 最后写入描述,然后点击Comment按钮,然后你观察main分支中,就会发现那里有了之前没有的ToastUtils。


那么现在develop分支就没有什么用了,因此我们可以删除这个分支。

git branch -d develop


我们在删除前查看一下分支,然后执行删除,删除后再查看一下:

4a95e3aedcbc4759b93ad962ad8e929b.png


 -d表示删除标识,要删除的不能是当前显示分支,同时不能包含未合并的更改和未提交的推送。


现在远程仓库中还有两个分支,我们也可以将远程仓库的分支删除掉。

git push origin -d develop


执行之前查看所有分支,执行删除,删除之后再查看所有分支。

645239a0b2df42e09b403c5d4a1c4b4c.png


 很多时候我们会参考别的的代码,框架。会先运行别人的源码看看效果,这里就需要用到克隆。


 例如我可能自己的项目到当前电脑指定文件夹下,项目地址是:Android12Bluetooth

f5f818a546534240af89e812fb18217c.png


点击Code按钮。

fa0463aa0e0848be9f19d9c171ee4cc5.png


点击复制按钮,然后我们进入一个指定目录。

8c2e4d649efb47b5b781c7b150160182.png


克隆指令如下


⑭ git clone

git clone https://github.com/lilongweidev/Android12Bluetooth.git


进入PowerShell,先进入到指定文件夹下,然后克隆。

c16780ca49584dec9da6ddf2d325fc8c.png


然后再看文件夹。

6faa50654adf4e6e95145ad99f68bf6e.png


克隆成功。


四、结束


 Git的使用需要经常使用才能印象深刻,关于git的使用网络上有很多很多,遇到问题解决的方法也有很多,遇到问题不要慌,要坚定自己能解决这个问题,加油奥里给!!!

相关文章
|
4月前
|
Java 开发工具 Android开发
Android Studio利用Build.gradle导入Git commit ID、Git Branch、User等版本信息
本文介绍了在Android Studio项目中通过修改`build.gradle`脚本来自动获取并添加Git的commit ID、branch名称和用户信息到BuildConfig类中,从而实现在编译时将这些版本信息加入到APK中的方法。
95 0
|
数据可视化 程序员 开发工具
Android studio配置git及使用方法
Android studio配置git及使用方法
|
数据可视化 开发工具 Android开发
Android Git 拉取代码报错:error: cannot pull with rebase: Your index contains uncommitted changes.
造成原因:在使用Android Studio中Git的Commit Directory 将本地更改的代码保存到本地后,点击commit,发现提交不上去,发现本地有代码,这时候拉取代码,报错:cannot pull with rebase: Your index contains uncommitted changes.表示我的索引有未提交的改变
|
存储 开发工具 Android开发
Android中动态获取最新的git commit_id
项目中有时会遇到需要我们获取最新版本号的逻辑,方便我们定位错误等。
|
开发工具 Android开发 数据安全/隐私保护
Android Studio关联Git及使用
Android Studio关联Git及使用
766 0
Android Studio关联Git及使用
|
开发工具 Android开发 git
android studio .gitignore模板文件(git版本控制)
android studio .gitignore模板文件(git版本控制)
262 0
|
网络安全 开发工具 Android开发
Android 基础操作 git操作
Git 操作 git 命令 创建本地仓库 git init 获取远程仓库 git clone [url] 例:git clone https://github.
836 0
|
开发工具 Android开发 git
|
Linux 开发工具 Android开发
64位ubuntu11.10使用git下载android源码
Android是一个开发源码的平台,那就意味着,我们每一个人都可以下载、修改和创建自己的android platform,我们甚至可以帮助Android community完善和改进代码,当然这些离我们还有点远,反正离我还是比较远的,但看看总是可以的哈。
935 0