目录
1. git简介
1.1 git是什么
是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
git的安装非常简单:
- 到
1.2 git与svn的区别
1) git是分布式的
GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别
2)git仓库的任何一个拷贝都可以独立作为一个服务器来使用,因为git是分布式的,在远程仓库和本地仓库中都有完整拷贝。
3)在Git中文件有四种状态:
未跟踪(untrack):表示文件为新增加的
已修改(modified):表示修改了文件,但还没保存到git仓库中。
已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中
已提交(committed):表示文件已保存在git仓库中。
4) 其它
GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏
5) 直接记录快照,而非差异
GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
6) 直接记录快照,而非差异
GIT分支和SVN的分支不同,分支在SVN中一点不特别,就是版本库中的另外的一个目录。
前三个不同点重点理解,后面几个一般性了解
2. github
GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub。
github上repository分为public和private,public可以被其他人看到并clone;而private是不能被别人看到的。这里把repository创建为private的场景为:自己创建一个私人项目,但是又需要和其他developer一起开发,所以,需要developer都能克隆这个private repository,并且都能提交到这个private repository。
目前GitHub为微软所有,可以免费的创建私有仓库,但免费的情况下,协助的成员最多为3个。
2.1 创建仓库
首先登陆到github
勘误:生成readme.md(markdown类型的文件)文件而不是readme.txt文件
https和ssh的区别,就是前者会需要提供账号密码,后者就是通过数字证书的形式,免密(因为本地有数字证书)
创建完成后
2.2 删除仓库
2.3 新建文件及文件夹(一般情况通过命令的方式创建)
3. git的基本操作
3.1 配置账户及邮箱
一般刚安装Git都要配置用户名和邮箱,因为你提交代码到本地仓库(上传代码到远程仓库)时会用到。如果没有没有配置,在你提交时它会提醒,如果仅仅是下载公有仓库则不需要,甚至不需要注册。
成功安装git后,在任何目录点击右键,选择“git bash here”即可进入git的命令窗口:
1)查看git的配置信息
git config --list
2)设置用户名及邮箱
git config --global user.name "username"
git config --global user.email "email"
# 为安全,一般不在配置信息中设置密码
git config --global user.password "password"
注:
全局配置:
--global 表示全局的,即当前用户都有效,该配置会出现在 ~/.gitconfig 文件中,~表示当前用户的目录,
比如:C:\Users\Administrator.gitconfig,打开该文件你会发现如下图所示的内容:
[user]
name = xxx
email = xxx@qq.com
局部配置
git config user.name "username"
git config user.email "email"
局部是只对当前仓库起效的,它的配置信息会在当前仓库根目录/.git/config文件下。注意:局部变量覆盖全局变量
3)删除某个全局配置项
git config --global --unset user.name
3.2 git文件状态与工作区域
git的文件状态是其git核心内容,了解后对后续的操作有莫大的帮助,不同的文件状态又存储在不同的工作区域中.
- git中的文件有以下几种状态
- 未跟踪(untrack):表示文件为新增加的
- 已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中
- 已提交(committed):表示文件已保存在git仓库中。
- 已修改(modified):表示修改了文件,但还没保存到git仓库中。
- 工作区域
按照本地计算机与远程计算机划分,工作区域有以下几种
- 本地计算机
Working Directory(工作目录):即正在编辑的文件状态。文件状态为未跟踪(untrack)和已修改(modified)在此区域内。
Staging Area(暂存区):保存了下次将提交的文件列表信息。文件状态为已暂存(staged)在此区域内。可以使用 git ls-files 查看暂存区的内容。
Repository(本地仓库):提交到本地仓库的文件。 - 远程计算机
Repository(远程仓库):已提交到远程计算机内的文件。
理解下图的示意图:
3.3 常用命令
pwd 查看当前文件路径
注:红色表示没被跟踪
注:查看暂存放区文件
注: -u意思就是下次登陆的时候直接git push 不用加-u
注:查看远程仓库
注:上传到git的流程,克隆就是git clone + 复制的网站
注:获取远程仓库
注:查看日志
注:git add . 之后从暂存区移除
使用下面代码可以在家回去
注:删掉了,发现还需要,那么就可以 这样恢复
恢复后:
3.4 克隆(clone)
2)到本地目录(你所要放置项目的目录),右击鼠标,选择“git bash here”进入git命令行。
git clone https://github.com/lisensir/hello-world.git
如图:
注:本例演示了通过https协议克隆,除了https协议git还支持如下协议:
git clone git@github.com:fsliurujie/test.git --SSH协议
git clone git://github.com/fsliurujie/test.git --GIT协议与其他版本控制软件,如svn相比,这里使用的克隆(clone),而不是检出(checkout),git 收取的是项目历史的所有数据(每一个文件的每一个版本),服务器上有的数据克隆之后本地也都有了。实际上,即便服务器的磁盘发生故障,用任何一个克隆出来的客户端都可以重建服务器上的仓库,回到当初克隆时的状态
3.5 查看git仓库的状态
要先来到对应项目的目录。
git status
3.6 新创建的文件并添加到“暂存区”
在git管理的目录(如上例中的hello-word目录),新建一个文件
可以使用如下命令查看状态:
git status
注:红色表示没有加入暂存区。
将文件放入“暂存区”
$ git add .
注: 后面的那个“.” 所示将所有新增的文件都放入暂存区。
查看git状态
3.8“暂存区”的内容提交到“本地仓库”
git commit -m '注释'
3.9“本地仓库”的内容提交到“远程仓库”
语法:
git push <远程主机名> <本地分支名> <远程分支名>
示例:
git push origin master
注:
如果省略远程分支名,则推入与本地分支同名的远程分支
远程分支一般默认的名称为 origin,但不是必须的。
git push -u origin master
注:如果带有-u参数,则指定了默认的远程主机, 这样以后再推入时,可以简写为:git push。不带任何参数的git push,默认只推送当前分支,这叫做simple方式。
3.10 将本地项目推入远程仓库。
1)在本地创建一个目录:
2)进入gitdemo目录,右击鼠标打开git命令行(Git Base Here)
3)使用git init 初始化git仓库
4)在gitdemo目录中添加一个测试文件,如abc.txt
5)将新增的abc.txt文件加入的本地仓库(分两步,见下图)
6) 在github中创建仓库
7)本地仓库与远程仓库关联
添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
8)把本地库的所有内容推送到远程库上
3.11 冲突的问题
1)粗暴方式
git push -f
会忽略版本不一致等问题,强制将本地库上传的远程库,会覆盖远程仓库的内容。要谨慎使用
注:可以理解为强制提交,强行用自己将自己的提交覆盖上去
2)温柔方式
使用 git pull 或 git fetch,先更新远程仓库内容。处理完合并后再推入远程仓库
注:决定好使用谁的提交代码,之后删掉就行了,
注:意思就是说合并之后的提示