本文是 《第一行代码 Android 》git 部分学习笔记
这些内容只是Git知识的冰山一角
更多知识请 阅读 Pro git。Pro git 所有内容均根据知识共享署名非商业性共享3.0版许可证授权,各位可以免费下载阅读,有pdf、mobi、qpub格式可以下载。
https://git-scm.com/book/zh/v2
下载git
https://git-scm.com/download/win
设置字体
设置用户
首先,你需要执行下面两条命令,作为git的基础配置,作用是告诉git你是谁,你输入的信息将出现在你创建的提交中.
git config --global user.name "你的名字或昵称"
git config --global user.email "你的邮箱"
初始化
然后在你的需要初始化版本库的文件夹中执行
git init
git remote add origin <你的项目地址> //注:项目地址形式为:http://git.oschina.net/xxx/xxx.git或者 git@git.oschina.net:xxx/xxx.git
提交本地代码
//提交一个文件
git add AndroidManifest.xml
//提交文件夹
git add src
//提交整个
git add .
通过-m参数来加上提交的描述信息,没有描述信息的提交被认为是不合法的
git commit -m "First commit
这样就完成了一次版本你的初始化
忽略文件
Git提供了一种可配性很强的机制来允许用户将指定的文件或目录排除在版本控制之外,它会检查代码仓库的根目录下是否存在一个名为.gitignore的文件,如果存在的话就去一行行读取这个文件中的内容,并把每一行指定的文件或目录排除在版本控制之外。注意.gitignore中指定的文件或目录是可以使用“*”通配符的。
要养成一开始就设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。
文件 .gitignore 的格式规范
该部分 引用《Pro Git》
所有空行或者以注释符号 # 开头的行都会被 Git 忽略
可以使用标准的 glob 模式匹配。
匹配模式最后跟反斜杠(/)说明要忽略的是目录。
要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。
星号(*)匹配零个或多个任意字符;
[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
问号(?)只匹配一个任意字符;
如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9
的数字)。
例子1
该部分 引用《Pro Git》
*.[oa]
*~
第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件 第二行告诉 Git 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件(比如
Emacs)都用这样的文件名保存副本。
例子2
该部分 引用《Pro Git》
# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
查看修改内容
在项目的根目录下输入如下命令:
git status
git diff <文件名>
撤销未提交的修改
有的时候我们代码可能会写得过于草率,以至于原本正常的功能,结果反倒被我们改出了问题。遇到这种情况时也不用着急,因为只要代码还未提交(git add .),所有修改的内容都是可以撤销的。
git checkout src/com/example/providertest/MainActivity.java
查看提交记录
git log
当提交记录非常多的时候,如果我们只想查看其中一条记录,可以在命令中指定该记录的id,并加上-1参数表示我们只想看到一行记录
git log 2e7c0547af28cc1e9f303a4a1126fddbb704281b -1
而如果想要查看这条提交记录具体修改了什么内容,可以在命令中加入-p参数,命令如下:
git log 2bf94087f2d0058456f7a3540463d62558227680 -1 -p
commit 2bf94087f2d0058456f7a3540463d62558227680
Author: wbf <852172891@qq.com>
Date: Tue Jan 30 16:21:50 2018 +0800
添加集合部分
diff --git a/src/array/BeWaryOfShallowCopyArrays.java b/src/array/BeWaryOfShallowCopyArrays.java
index 2f47096..fbe2579 100644
--- a/src/array/BeWaryOfShallowCopyArrays.java
+++ b/src/array/BeWaryOfShallowCopyArrays.java
@@ -37,7 +37,6 @@ public class BeWaryOfShallowCopyArrays {
for (Balloon balloon : box2) {
System.out.println(balloon);
}
-
}
}
/**
diff --git a/src/array/DifferentListChoseDifTraverseMethord.java b/src/array/DifferentListChoseDifTraverseMethord.java
deleted file mode 100644
index 73ea2fd..0000000
其中减号代表删除的部分,加号代表添加的部分
分支的用法
分支是版本控制工具中比较高级且比较重要的一个概念,它主要的作用就是在现有代码的基础上开辟一个分叉口,使得代码可以在主干线(master)和分支线上同时进行开发,且相互之间不会影响。
创建分支
git branch version1.0
切换分支
git checkout version1.0
查看是哪一个分支
git branch –a
如果我们在version1.0分支上修复了一个bug,在master分支上这个bug仍然是存在的。这时将修改的代码一行行复制到master分支上显然不是一种聪明的做法,最好的办法就是使用merge命令来完成合并操作
git checkout master
git merge version1.0
删除分支
git branch -D version1.0
与远程版本库协作
克隆一个项目
如果你想克隆一个项目,只需要执行
git clone <项目地址>
push
之后你在这份代码的基础进行了一些修改和提交,那么怎样才能把本地修改的内容同步到远程版本库上呢?这就需要借助push命令来完成了
其中origin部分指定的是远程版本库的Git地址,master部分指定的是同步到哪一个分支上
git push origin master
fetch
将远程版本库上的修改同步到本地。Git提供了两种命令来完成此功能,分别是fetch和pull
git fetch origin master
执行这个命令后,就会将远程版本库上的代码同步到本地,不过同步下来的代码并不会合并到任何分支上去,而是会存放在到一个origin/master分支上,这时我们可以通过diff命令来查看远程版本库上到底修改了哪些东西:
git diff origin/master
之后再调用merge命令将origin/master分支上的修改合并到主分支上即可,如下所示:
git merge origin/master
pull
而pull命令则是相当于将fetch和merge这两个命令放在一起执行了,它可以从远程版本库上获取最新的代码并且合并到本地
git pull origin master