Git时间

Git.jpg

Git

常见的版本控制工具主要有svn和Git

Git是一个开源的分布式版本控制工具,它的开发者就是大名鼎鼎的Linux操作系统的作者Linus Torvalds。Git被开发出来的初衷是为了更好地管理Linux内核,而现在却早已被广泛应用于全球各种大中小型的项目中。

Git的各种命令是你应该掌握的核心技能,不管你是在哪个操作系统上,使用命令来操作Git肯定都是通用的。而图形化的操作应该是在你能熟练掌握命令用法的前提下,进一步提升你工作效率的手段。

如果你使用的是Windows操作系统,就从开始里面找到Git Bash并打开。

1.配置一下你的身份

image

然后我们就可以创建代码仓库了,仓库(Repository)是用于保存版本管理所需信息的地方,所有本地提交的代码都会被提交到代码仓库中,如果有需要还可以在推送到远程仓库中。
image

我们尝试着给BroadcastBestPractice项目建立一个仓库。
先进入到BroadcastBestPractice项目的目录下面。
git init
只需要一行命令就可以完成创建代码仓库的操作。

仓库创建完成后,会在BroadcastBestPractice项目的根目录下,生成一个隐藏的.git文件夹,这个文件夹就是用来记录本地所有的Git操作的,可以通过ls -al命令查看一下

2.提交本地代码

image

代码仓库建立完之后就可以提交代码了,其实提交代码的方法也非常简单,只需要使用addcommit命令就可以了。
add用于把想要提交的代码先添加进来。
commit则是真正地去执行提交操作。

git add build.gradle:添加文件。
git add app:添加目录。
git add .:一次性把所有文件都添加进来。
git commit -m "First commit"
注意;commit命令的后面,我们一定要通过-m参数来加上提交的描述信息,没有描述信息的提交被认为是不合法的。

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

准备工作

image

准备工作就是要给一个项目创建代码仓库 ,打开Git Bash,进入到这个项目的根目录下面,然后执行git init命令。

忽略文件

build目录下的文件都是编译项目时自动生成的,我们不应该将这部分文件添加到版本控制当中。

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

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

首先看一下根目录下面的.gitignore文件

image

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

再来看一下app模块下面的.gitignore文件

image

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

当然,我们完全可以对以上两个文件进行任意的修改,来满足特定的需求。

/build
/src/test
/src/androidTest

然后在依次执行:

git add .

image

git commit -m "First commit."

image
image

查看修改内容

在进行了第一次代码提交之后,我们后面还可能会对项目不断地进行维护或添加新功能等。比较理想的情况是每当完成了一小块功能,就执行一次提交。但是如果某个功能牵扯到的代码比较多,有可能写到后面的时候我们就已经忘记前面修改了什么东西了。遇到这种情况时不用担心,Git全都帮你记着呢!

查看文件修改情况的方法非常简单,只需要使用status命令就可以了。

image

git status
然后Git会提示目前项目中没有任何可提交的文件,因为我们刚刚才提交过嘛。

//values.put("price",22.85);
values.put("price",55.55);

这里仅仅是在添加数据的时候,将书的价格由22.85改成了55.55。然后重新输入git status命令。

image

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

这样可以查看到所有文件的更改内容,如果你只想查看MainActivity.java这个文件的更改内容

git diff app/src/main/java/com/example/providertest/MainActivity.java

image

减号代表删除的部分
加号代表添加的部分

从图中我们就可以明显的看到,书的价格由22.85被修改成了55.55

撤销未提交的修改

只要代码还未提交,所有修改的内容都是可以撤销的

上一小节中我们修改了MainActivity里一本书的价格,现在如果想要撤销这个修改就可以使用checkout命令,

git checkout app/src/main/java/com/example/providertest/MainActivity.java

image

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

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

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

首先仍然是将MainActivity中那本书的价格改成55.55,输入git add .

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

image

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

对于已添加的文件我们应该先对其取消添加,然后才可以撤回提交。取消添加使用的是reset命令。
git reset HEAD app/src/main/java/com/example/providertest/MainActivity.java

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


image

查看提交记录

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

git log

image

每次提交记录都会包含提交id,提交人,提交日期以及提交描述这4个信息。那么我们再次将书架修改成55.55,
git add .
git commit -m "Change price."

image

当提交记录非常多的时候,如果我们只想查看其中一条记录,我们在命令中指定该记录的id,并加上-1参数表示我们只想看到一行记录。

git log 39e4c213a7f5f8760a35f769c1261c2cbcdcc644 -1

image

如果想要查看这条提交记录具体修改了什么内容,可以在命令中加入-p参数

git log 39e4c213a7f5f8760a35f769c1261c2cbcdcc644 -1 -p

image

Git时间---版本控制工具的高级用法

分支的用法

分支是版本控制工具中比较高级且比较重要的一个概念,它主要的作用就是在现有代码的基础上开辟一个分叉口,使得代码可以在主干线和分支线上同时进行开发,且相互之间不会影响。

分支的英文名是branch,如果想要查看当前的版本库当中有哪些分支,可以使用git branch这个命令。


image

由于目前LBSTest项目中还没有创建过任何分支,因此只有一个master分支存在,这也就是前面所说的主干线。接下来我们尝试创建一个分支:


image

可以看到果然有一个叫做version1.0的分支出现了。你会发现,master分支的前面有一个"*"号,说明目前我们的代码还是在master分支上的,只需要使用checkout命令就能切换到version1.0分支上。

再次输入git branch来进行检查。


image

我们已经成功把代码切换到version1.0这个分支上了。

需要注意的是,在version1.0分支上修改并提交的代码将不会影响到master分支。同样的道理,在master分支上修改并提交的代码也不会影响到version1.0分支。因此,如果我们在version1.0分支上修改了一个bug,在master分支上这个bug是仍然存在的。这时将修改的代码一行行复制到master分支上显然不是一种聪明的做法,最好的办法就是使用merge命令来完成合并操作。


image

仅仅这样简单的两行命令,就可以把在version1.0分支上修改并提交的内容合并到master分支上了。当然,在合并分支的时候还有可能出现代码冲突的情况,这个时候你就需要静下心来慢慢地找出并解决这些冲突,Git在这里就无法帮助到你了。

最后,当我们不再需要version1.0这个分支的时候,可以使用如下命令将这个分支删除掉:


image

11.5.2 与远程版本库协作

如果你是一个人在开发,那么使用版本控制工具就远远无法发挥出它真正强大的功能。所有版本控制工具最重要的一个特点就是可以使用它来进行团队合作开发。

比如说现在有一个远程版本库的Git地址是https://github.com/example/test.git,就可以使用如下命令将代码下载到本地:

git clone https://github.com/example/test.git

之后你在这份代码的基础上进行了一些修改和提交,需要借助push命令来完成把本地修改的内容同步到远程版本库上。

git push origin master

其中origin部分指定的是远程版本库的Git地址,master部分指定的是同步到哪一个分支上,上诉命令就完成了将本地代码同步到https://github.com/example/test.git这个版本库的master分支上的功能。

知道了将本地的修改同步到远程版本库上的方法,接下来我们看一下如何将远程版本库上的修改同步到本地。Git提供了两种命令来完成此功能,分别是fetch和pull,fetch的语法规则和pull是差不多的。

git fetch origin master

执行这个命令后,就会将远程版本库上的代码同步到本地,不过同步下来的代码并不会合并到任何分支上去,而是会存放到一个origin/master分支上,这时我们可以通过diff命令来查看远程版本库上到底修改了哪些东西:

git diff origin/master

之后再调用merge命令将origin/master分支上的修改合并到主分支上即可。

git merge origin/master

而pull命令则是相当于将fetch和merge这两个命令放在一起执行了,它可以从远程版本库上获取最新的代码并且合并到本地。

git pull origin master

14.2 Git时间---将代码托管到GitHub上

首先是自动跳转到GitHub的个人主页

Github个人主页.png

可以点击Start a project 按钮来创建一个版本库。

创建版本库.png

这里将版本库命名mengweather,然后选择一个添加Android项目类型的.gitignore文件,并使用Apache License 2.0来作为软件的开源协议。

接着点击Create repository按钮,mengweather这个版本库就创建完成了。版本库主页地址是https://github.com/WuMeng-1993/mengweather

GitHub已经自动帮我们创建了.gitignore,LICENSE文件,其中README.md文件中的内容可以修改天气软件版本库主页的描述。

创建好版本库之后,我们要创建项目了。
在Android Studio新建一个Android项目。

接下来的一步非常重要,我们需要将远程版本库克隆到本地。首先需要知道远程版本库的Git地址,点击Clone or download按钮就能够看到了。

版本库地址.png

进入到MengWeather文件下,接着输入git clone git地址 来把远程版本库克隆到本地。

克隆到本地.png

看到图中所给的文字提示就表示克隆成功了,可以进入到mengweather目录,并使用ls - al命令查看一下。

查看克隆到本地的文件.png

现在我们需要将这个目录中的所有文件全部复制粘贴到上一层目录中,这样就能将整个MengWeather工程目录添加到版本控制中去了。注意.git是一个隐藏目录,在复制的时候千万不要漏掉。另外,上一层目录中也有一个.gitignore文件,我们直接将其覆盖即可。复制完之后可以把MengWeather目录删除掉。
最终的MengWeather的目录结构如下:

MengWeather工程的目录结构.png

接下来我们应该把MengWeather项目中现有的文件提交到GitHub上面。

先将所有文件添加到版本控制中:

git add .

然后在本地执行提交操作:

git commit -m "First commit."

最后将提交的内容同步到远程版本库,也就是GitHub上面:

git push origin master

注意,在最后一步的时候GitHub要求输入用户名和密码来进行身份校验,这里输入我们注册时填入的用户名和密码就可以了。


校验图.png

这样就完成同步了。

在GitHub上提交的内容.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容