9.6--Git时间:版本控制工具进阶

在上一次的Git时间里,我们学习了关于Git最基本的用法,包括安装,创建代码仓库,以及提交本地代码。本届中我们将要学习更多的使用技巧,不过在开始之前要先把准备工作做好。

所谓的准备工作就是要给一个项目创建代码仓库。这里就选择在PlayVideoTest 项目中创建吧。打开终端界面,进入这个项目的根目录下面,然后执行git init 命令。

9.6.1 忽略文件

代码仓库现在已经创建好了,接下来我们应该去提交PlayVideoTest 项目中的代码。不过在提交之前,你也许应该考虑一下,是不是所有的文件都需要加入版本控制当中呢?

在第1章介绍Android 项目结构的时候我们提到过,build 目录下的文件都是编译项目时自动生成的,我们不应该将这部分文件添加到版本控制当中,那么如何才能实现这样的效果呢?

Git 提供了一种可配性很强的机制,允许用户指定的文件或目录排除在版本控制之外,它会检查代码仓库的目录下是否存在一个名为.gitignore 的文件,如果存在,就去一行行读取这个文件中的内容,并把每一行指定的文件或目录排除在版本控制之外。注意,.gitignore 中指定的文件或目录是可以使用 “*”通配符的。

神奇的是,我们并不需要自己去创建.gitignore 文件,Android Studio 在创建项目的时候会自动帮我们创建出两个.gitignore 文件,一个是在根目录下,一个在app 模块下。首先看一下根目录下面的.gitignore  文件:

这是Android Studio 自动生成的一些默认配置,通常情况下,这部分内容都不用添加到版本控制当中。我们来简单阅读一下这个文件,除了*.iml 表示指定任意以.iml 结尾的文件,其他都是指定的具体的文件名,上面配置中的所有内容都不会被添加到版本控制当中,因为基本是一些由IDE 自动生成的配置。

再来看一下app 模块下面的.gitignore 文件,这个就简单多了:

由于app 模块下面大多是我们编写的代码,因此默认情况下只有其中的build 目录不会被添加到版本控制当中。

当然,我们完全可以对以上两个文件进行任意修改,来满足特定的需求。比如说,app模块下的所有测试文件都只是给我自己使用的,我并不想把它们添加到版本控制中,那么就可以这样修改app/.gitignore 文件中的内容:

没错,只需添加这样两行配置即可,因为所有的测试文件都是放在这两个目录下的。现在我们可以提交代码了,先使用add 命令将所有的文件进行添加,如下所示:

git add .

ps: 后面是有个点的,表示全部

然后执行commit 命令完成提交,如下所示:

git commit -m "First Commit"

 

9.6.2 查看修改内容

在进行了第一次代码提交之后,我们后面还可能会对项目不断地进行维护或添加新功能等。比较理想的情况是,每当完成了一小块功能,就进行一次提交。但是如果某个功能涉及的代码比较多,有可能写到最后的时候我们就已经忘记了前面修改什么东西了。遇到这种情况时不用担心,Git 全部帮你记着呢! 下面我们就来学习一下如何使用 Git 查看自上次提交后文件修改的内容。

查看文件修改情况的方法非常简单,只需要使用status 命令就可以了,在项目的根目录下输入命令:

git status 

然后Git 会提示目前项目中没有任何可提交的文件,因为我们刚刚提交过了。现在对PlayVideoTest 项目中代码稍微做一下改动,修改ManActivity 中的代码,如下所示:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        ...
        play.setOnClickListener {
            if (!videoView.isPlaying){
                videoView.start()
            }
            Log.d("MainActivity","video is playing")
        }
        ...
    }

}

这里我们仅仅是在play 按钮的点击事件中添加了一行日志打印。然后重新输入git status 命令,结果如下:

可以看到,Git 提醒我们MainActivity.kt这个文件已经发生了改变,那么如何才能看到更改的内容呢?这就需要借助diff 命令了,用法如下:

git diff 

这样可以查看所有文件的更改内容,如果你只想查看MainActivity.kt这个文件的更改内容,可以在后面加上完成的文件路径:

git diff app/src/main/java/com/example/playvideotest/MainActivity.kt,执行命令结果如下:

这样文件所有的修改内容就都可以在这里查看了,一览无余。其中,变更部分最左侧的加号代表新添加的内容。如果有删除内容的话,会在最左侧用减号表示。

 

9.6.3 撤销未提交的修改

有时候我们的代码可能写的过于草率,以至于原本正常的功能,结果反而被我们改出了问题。遇到这种情况时也不用着急,因为只要代码还未提交,所有修改的内容都是可以撤销的。

比如上一小节中我们给MainActivity 添加了一行日志打印,现在如果想要撤销这个修改就可以使用checkout 命令,如法如下(Ps 这样操作后本地代码会真的被还原到上次提交哦):

git checkout app/src/main/java/com/example/playvideotest/MainActivity.kt

执行了这个命令之后,我们对MainActivity.kt 这个文件所做的一切修改就应该都被撤销了。重新运行git status 命令检查一下,结果如图 :

可以看到,当前项目中没有任何可提交的文件,说明撤销确实成功了。

不过,这种撤销的方式只适用于那些还没有执行过add 命令的文件,如果某个文件已经被添加过了,这种方式就无法撤销更改的内容。下面我们来做个实验瞧一瞧。

首先扔是给MainActivity 添加一行打印日志,然后输入命令:

git add .

这样就把所有修改的文件都进行了添加,可以输入git status 检查一下。结果如图:

现在我们再执行一遍checkout  命令,你会发现MainActivity 仍然处于已添加状态,所修改的内锅无法撤销掉。

这种情况应该怎么办?难道我们还没法后悔了?当然不是,只不过对于已添加的文件,我们应该先对其取消添加,然后才可以撤销提交。取消添加使用的是reset 命令,用法如下所示:

git reset HEAD app/src/main/java/com/example/playvideotest/MainActivity.kt

然后再运行一遍git status 命令,你就会发现MainActivity.kt 这个文件重新变回了未添加状态,此时就可以使用checkout 命令将修改的内容进行撤销了。

 

9.6.4 查看提交记录

当PlayVideoTest 这个项目开发了几个月之后,我们可能已经执行过上百次的提交操作了,这个时候估计你就已经忘记每次提交都修改了哪些内容。不过没关系,忠实的Git 一直都帮我们清清楚楚的记着呢!可以使用log 命令查看历史提交信息,如法如下所示:

git log

由于目前我们只执行过一次提交,所以能看到的信息很少,如图:

可以看到,每次提交记录都会包含提交Id、提交人、提交日期以及提交描述这4个信息。那么我们再次给MainActivity 添加一行日志打印,然后执行一次提交操作,如下所示:

git add .

git commit -m "Add log"

现在重新执行git log 命令,结果如下:

当提交记录非常多的时候,如果我们只想看其中一条记录,可以在命令中指定该记录的id:

git log c1e771ee6429737c7df7f0018c8fae6521144568

也可以在命令中通过参数指定查看最近几次提交,比如 -1 就表示我们只想看到最后一次的提交记录:

git log -1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值