版本控制工具Git
Git概要
git是一个开源的分布式版本控制系统。git没有中心服务器的概念,每一个git客户端(git节点)都含有一个完整的代码仓库(前提是你之前从远程git仓库fetch过代码),所以那些历史版本信息都在你本机上,假如哪一个git节点挂掉了,随意从其他git节点clone一个代码仓库过来就ok了, 那些原来的代码、版本信息之类的都还是完整的。
git主要分为工作区(Workspace)、暂存区(Index)、本地仓库(Repository)、远程仓库(Remote),分层结构示意图:
执行git init命令或是clone了一个库到本地后,就会创建并初始化git仓库,这个时候在该目录下会产生一个.git的隐藏文件夹,而该目录就是你的工作目录。
这个.git文件夹就是你的本地仓库,当你进行了一些文件操作之后,认为可以提交了那么首先你就是提交到本地仓库也就是这个.git中,然后再推送到远程服务器。
Git基本操作示意图:
本地文件夹下的重要的目录和文件说明:
config文件,这是你项目的配置文件,里面有中心服务器的信息和分支信息
HEAD文件指向当前的分支
index文件是暂存区的相关信息
logs目录中都是相关操作产生的日志,这个很重要,因为日志是我们操作的唯一证据,我们本地的版本控制也靠它
objects目录里面存储的就是所有的数据,也就是快照
refs目录里是存储指向数据提交对象的指针
访问 https://git-for-windows.github.io/ 下载Git安装包。
http://img2.tuicool.com/ziI7Nv.jpg!web
创建代码仓库
首先配置身份,Windows系统打开Git Bash,输入命令:
git config --global user.name "username"
git config --global user.email "username@mail.com"
创建完后查看用户名和E-mail:
git config user.name
git config user.email
然后可以开始创建代码仓库:
创建一个项目的目录,进入到项目目录下面,在项目目录下输入:
git init
完成代码仓库创建,创建完成后在项目的根目录下生产一个隐藏的.git文件夹,这个文件夹用来记录本地所有的Git操作。可以通过 ls -al 命令来查看一下。
如果要删除本地仓库,只需删除这个文件夹就可以了。
提交本地代码
使用add和commit命令。
add用于把想要提交的代码先添加进来,commit执行提交操作。
例如添加要build.gradle文件,输入如下命令:
git add build.gradle
添加整个目录,在add后面加目录明:
git add app
一次性添加所有文件,在add后面加一个. :
git add .
添加完成后,就可以提交了:
git commit -m "First commit."
-m参数添加提交的描述信息,没有描述信息的提交被认为是不合法的。
忽略文件
Git提供了一种可配性很强的机制来允许用户将指定的文件或目录排除在版本控制之外,它会检查代码仓库的根目录下是否存在一个名为.gitignore的文件,如果存在,就去一行行地读取这个文件的内容,并把每一行指定的文件或目录排除在版本控制之外。
.gitignore中指定的文件或目录可以使用 “*” 通配符。
编辑.gitignore文件:
bin/
gen/
这表示把bin目录和gen目录下的所有文件都忽略,它们将不会加入到版本控制当中。
查看修改内容
查看文件修改情况:
git status
查看文件更改的内容:
git diff
撤销未提交的更改:
只要代码还未提交,所有修改的内容都是可以撤销的
git checkout
如果已经执行过add命令,那么git checkout命令就无法撤销了。对于已添加的文件,应先对其取消添加,然后才可以撤销。
取消添加:
git reset
然后在运行git checkout就可以进行撤销了。
查看提交记录
查看历史提交记录:
git log
当提交记录非常多的时候,而我们只想查看其中一条记录,可以在命令中指定该记录的id,并加上-l参数表示我们只想看到一行记录。
而如果想要查看这条提交记录具体修改了什么内容,可以在命令中加入-p参数。
分支的用法
分支的作用是在现有代码的基础上开辟一个分叉口,使得代码可以在主干线和分支线上同时进行开发,且相互之间不会影响。
查看当前的版本库中有哪些分支:
git branch -a
如果当前项目中没有创建任何分支,那么就只有个一个master分支存在。
创建一个名为version1.0的分支:
git branch version1.0
切换到刚创建好的version1.0分支:
git checkout version1.0
此时,version1.0上的修改并提交将不会影响到master分支,master也不会影响到version1.0分支。
当你想吧version1.0分支上修改并提交的内容合并到master分支上,使用如下命令:
git checkout master
git merge version1.0
如果不再需要version1.0这个分支时,可以用如下命令把这个分支删除:
git branch -D version1.0
与远程版本库协作
创建一个远程版本库,团队的每个成员都从这个远程版本库中获取到最原始的代码,然后各自进行开发,并且以后每次提交的代码都同步到远程库,并从远程库中获取最新代码。
例如现在有一个远程版本库的Git地址是http://github.com/exmaple/test.git,使用如下命令将代码下载到本地:
git clone https://github.com/example/test.git
之后在这份代码上进行了一些修改和提交,再把本地修改的内容同步到远程版本库:
git push origin master
其中,orgin指的是远程版本库的Git地址,master指的是同步到哪一个分支上。
将远程版本库的的修改同步到本地,Git提供了两种命令: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
git remote 远程操作
为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。
git remote
不带选项,用于列出所有远程主机。
git remote -v
使用-v选项,可以查看远程主机的网址。
clone远程版本库的时候,远程主机自动命名为origin。如果想使用其他主机名,需要用git clone -o选项指定,例:
$ git clone -o test https://github.com/test/test.git
以上命令,指定了远程主机名为test。
git remote add
用于添加远程主机: git remote add <主机名> <网址>
git remote rm
用于删除远程主机: git remote rm <主机名>
git remote rename
用于远程主机改名: git remote rename <原主机名> <新主机名>
删除Github上的项目
1、登陆github到个人主页,点击“Repositories”,就能看到你自己创建或者“Fork”的项目。
2、找到你要删除的“Repositories”(或者也可以说是项目),点击进入。
3、找到该Repositories页面右下方的“Settings”,如图中标示,点击“Settings”进入;
4、进到“Settings”之后,点选左边框中的“Options”(一般默认也是这个选项),然后拉到最下,就可以看到“Delete this repository”;
5、点击“Delete this repository”,弹出对话框,需要你填写要删除的这个“Repositories”名字,然后就可以删除整个项目了,注意不填写的话是不能删除的。
常见的Git操作命令详见以下博客:
http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
http://www.cnblogs.com/qingtianyu2015/p/6124724.html
Git基本原理见此博客:
http://www.tuicool.com/articles/2Iz6R3