Android Git之旅

2022-07-12 17:04:39 浏览数 (1)

Android Git之旅

  • 前言
  • 正文
    • 一、安装Git
    • 二、准备工作
    • 三、旅行开始
      • ① git init
      • ② git add .
      • ③ git commit
      • ④ git config
      • ⑤ git remote
      • ⑥ git push
      • ⑦ git branch
      • ⑧ git pull
      • ⑨ git log
      • ⑩ git show
      • ⑪ git commit --amend
      • ⑫ git checkout
      • ⑬ git merge
      • ⑭ git clone
    • 四、结束

前言

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

正文

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

一、安装Git

  点击Git进入官网。

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

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

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

二、准备工作

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

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

GitHub

Gitee

GitLab

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

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

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

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

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

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

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

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

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

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

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

三、旅行开始

首先看一下我的GitHub主页。

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

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

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

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

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

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

① git init

代码语言:javascript复制
git init

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

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

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

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

② git add .

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

代码语言:javascript复制
git add .

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

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

③ git commit

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

代码语言:javascript复制
git commit -m "第一次提交"

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

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

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

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

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

④ git config

代码语言:javascript复制
git config --global user.email "lonelyholiday@qq.com"
代码语言:javascript复制
git config --global user.name "llw"

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

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

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

通过

代码语言:javascript复制
git config --global user.email

代码语言:javascript复制
git config --global user.name

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

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

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

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

  这一次执行成功了。

⑤ git remote

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

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

代码语言:javascript复制
git remote add origin "https://github.com/lilongweidev/GitStudy.git"

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

⑥ git push

  最后推送上去

代码语言:javascript复制
git push origin main

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

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

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

⑦ git branch

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

代码语言:javascript复制
git branch

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

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

代码语言:javascript复制
git branch -m master main

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

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

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

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

代码语言:javascript复制
git push --force

  再回车看看。

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

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

代码语言:javascript复制
git push --set-upstream origin main

  试试呗。

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

⑧ git pull

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

代码语言:javascript复制
git pull --rebase origin main

执行

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

代码语言:javascript复制
git push origin main

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

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

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

代码语言:javascript复制
# 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

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

这里只需要先后执行。

代码语言:javascript复制
git add .
代码语言:javascript复制
git commit -m "修改README.md"
代码语言:javascript复制
git push origin main

既可,如图所示:

我们再看看GitHub上的变化。

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

⑨ git log

  可以通过git log进行查询。

代码语言:javascript复制
git log

  在Terminal中执行,回车。

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

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

⑩ git show

代码语言:javascript复制
git show

执行回车

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

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

如果不需要查看了。

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

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

代码语言:javascript复制
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)
    }
}

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

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

代码语言:javascript复制
<uses-permission android:name="android.permission.CAMERA"/>

⑪ git commit --amend

执行

代码语言:javascript复制
git add .
代码语言:javascript复制
git commit --amend -m "添加静态权限。"

然后推送上去。

再查看commit日志。

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

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

代码语言:javascript复制
git branch develop

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

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

⑫ git checkout

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

执行

代码语言:javascript复制
git checkout develop

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

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

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

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

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

代码语言:javascript复制
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中使用它。

代码语言:javascript复制
private val requestCamera =
        registerForActivityResult(ActivityResultContracts.RequestPermission()) {
            if (it) "权限授予" else "未授予".showToast(this)
        }

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

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

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

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

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

执行

代码语言:javascript复制
git branch -a

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

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

代码语言:javascript复制
git checkout main

切换成功,下面进行合并

⑬ git merge

代码语言:javascript复制
git merge --no-ff develop

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

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

点击Contribute会出现一个弹窗。

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

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

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

再点击Confirm merge。

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

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

代码语言:javascript复制
git branch -d develop

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

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

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

代码语言:javascript复制
git push origin -d develop

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

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

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

点击Code按钮。

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

克隆指令如下

⑭ git clone

代码语言:javascript复制
git clone https://github.com/lilongweidev/Android12Bluetooth.git

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

然后再看文件夹。

克隆成功。

四、结束

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

0 人点赞