Git
- 文件操作回退不方便
- 文件的管理部方便
- 文件的存储是不安全
什么是Git?
- Git是一款源代码管理工具(版本控制工具)
- php JavaScript
- Git之父: linus 林纳斯托瓦茨
- linux之父:linus
- linus的大学教授 andrew 安德鲁-> 操作系统课程,unix–> 闭源,
- andrew 觉得,你不给我,我自己开发 –>minix 非常小的一个系统–>很多设备部兼容
- linus 希望去让minix能够通过一些插件,来让更多PC使用(纯洁)
- linus 觉得,你不给我,我自己做–> 从而开发了linux
- git bitkeeper 代码管理工具,收费,linus 手动来合并,
- 你找我收钱,不给我用,我就自己开发
- git 版本管理工具
- linux 和 git 都是开源的,可以让更多的开发者来分享和贡献 redcap
安装
- 注意事项及相关选项
- 缓存项需要去掉钩钩
git起步
- 任意目录,点击鼠标右键,出现 git bash || git GUI(图形化) 就证明安装好了
- 查看版本
git --version
- 初始化git目录
- 初始化仓库
git init
- 当前目录下生成了一个.git的文件夹
- .git内部存储了我们本地仓库的一些数据信息,以及对应关系(我们不需要了解)
- 默认创建了一个master的东西–> 叫做分支–> master分支就是主分支
- 查看状态
分布式和集中式的区别
- 分布式:在有网的时候,连接服务器,在本机就有了本地仓储,这个是可以没网提交,并且可以给服务器做一个备份
- 集中式:由于资源全在一个服务器上,万一服务器出现问题,大家都就可以版本可用
- 集中式也可以下载代码,但是版本的关系没有,而分布式,可以下载代码,和版本关系进行多端的备份
玩转工作区和暂存区
- 进暂存区
git add ./a.txt || .
代表所有文件及子文件
- 出暂存区
git rm --cached [文件名]
git rm --cached -r ./文件夹名称
//–cached表示只删除暂存区内容,不删除文件本身,-r表示递归删除所有的子文件
- 查看文件内容 cat 文件名
- 清屏 clear
- 如果出现VIM编辑模式:ESC : q 回车
“ 提交成功
[master (root-commit) cf885a1] 我提交了一次
1 file changed, 1 insertion(+)
create mode 100644 a.txt
“
git提交代码流程
- 1:创建文件夹
- 2:初始化Git仓库
- 3:创建了一个a.txt
- untracked 没有与git产生关联
- 4: 添加到暂存区
git add ./a.txt
- 显示
new file: a.txt
绿色可以继续进行
- 显示
- 5: 提交数据
git commit -m "这是提交说明"
// -M 是message缩写
- 简写方式
git commit -a -m "这是我的第二次提交"
- 以上表达式等于
git add . git commit -m "值是我的第二次提交"
- 修改了数据 此时又出现红字 modified :a.txt
- 每次修改后,都需要将文件重新添加到暂存区~
- 简写方式
自报家门
- 创建用户名和email :
git config user.name "tjx"
- 查看配置信息
git config --list
- 删除变量
git config --unset user.name
email : git config user.email "tjx@qq.com"
//规范是用户名和email一致- 以上添加用户,代表着是当前git仓库的用户,
- 你只要在别的目录下git init 就又是另一个仓库了,没有办法共享
- 既有全局用户,又有仓库级别的用户,以仓库的为主
- 查看配置信息
- 创建全局用户及邮箱
git config --global user.name "tjx12345"
git config --global user.email "tjx12345@qq.com"
复习
- git init
- 添加暂存区
git add ./文件名
git rm --cached 文件名
目录:git rm --cached -r 文件夹
- 提交数据
git commit -m "提交信息"
,在此之前添加用户 git config --global user.name "tjx"
git config --global user.email "tjx@qq.com"
//默认约定邮箱与用户名一致
- 添加暂存区
- 如果产生了文件的修改
- 需要重新添加进暂存区
- 如果需要查看内容 可以使用cat 文件名 清屏:clear
git日志
- 命令:
git log
- 可以查看提交日志
- 也可以使用
git log --oneline
查看简洁的信息
commit 5d866dbed888eba770d1ea4458505b1fef056e23 commit代表着git提交的唯一标识
Author: tjx <tjx@163.com>
Date: Fri Dec 9 11:13:37 2016 +0800
第二次修修改
$ git log --oneline
5d866db 第二次修修改
cf885a1 我提交了一次
git中的忽略文件的配置
- 之前我们一直折腾在,工作区,到暂存区之间,最终到了git仓库(版本库)
git 版本回退(一般运维人员使用,危险的命令)
- 命令:
git reset --hard Head~0
- 这里将代码回退到指定的版本,Head永远表示最近的一次提交。Head~0表示最近一次提交,然后Head~1表示最近一次提交前一次。Head~0可以简写成Head
git reset --hard 版本号
git reflog命令
git reflog
- 查看每一次操作的版本
git diff 对比文件差异
- 比较暂存区内容的时候,如果上次提交的数据是空,暂存区也没有值,仍然是第一次提交的数据
- 命令:
git diff [版本号1] [版本号2] [想要对比的文件路径]
- 命令:
git diff
比较暂存区文件和工作区的差异
git 分支
* 在不影响主分支上代码的情况下,将各个功能,可以交给各个人来做分支上的开发。
* 如果需要的话,可以进行代码合并,不需要的话,可以删除分支
创建分支
- 首先必须先通过master提交一次,才有创建分支的意义
- 没有提交,直接创建分支:
Not a valid object name: 'master'.
git branch 分支名称
- 查看分支
git branch
切换分支
git checkout 分支名称
合并分支
git merge 分支名称
- 将你指定的分支合并到当前所在的分支
删除分支
git branch -d 分支名称
解决冲突
- 两个分支同时修改一个文件,造成文件无法区分,该以谁的内容为准
- 系统无法分辨出,手动解决冲突(不存在合并了)
CONFLICT (content): Merge conflict in func1.
只要不reset,想这么切这么切换版本checkout
<<<<<<< HEAD
这个功能这么实现比较好
。。。。。。
功能开发完毕
=======
程序猿开始开发,开发功能即将完成
开发功能完成
>>>>>>> func1
- 案例演示:
创建并切换分支简写
git checkout -b [分支名]
github
- 注册账号
github与git
- github是一个网站, 提供了git服务器的功能
- git是版本管理工具
上传代码到git服务器上
推到服务器上(push)
- 一个仓库是300M。
- 命令:
git push [地址] [服务器上的分支名]
git push https://github.com/tjx12345/itcast_16_test.git master
git clone
- 就相当于右键另存为,把项目中的代码下载下来.
- 命令:
git clone [地址] [可以起个文件夹名]
- 示例:
git clone https://github.com/huoqishi/test110.git test
- 示例:
从服务器上拉取代码(pull)
- 案例演示
- 程序猿A改代码花了3个小时,在这段时间中,程序猿B提交了,他俩改过同一个文件
- pull 有个条件,执行命令的目录必需有个仓库
- 总结:学了3个命令:
- 推–> 只会推提交的内容 推到哪个分支
git push xxxxx.git master
- 复制 clone
git clone xxxx.git [创建的文件夹名称]
- 拉
git pull xxxx.git [根据分支]
- 拉的时候一定要有仓储
git init
- 推–> 只会推提交的内容 推到哪个分支
- 开发中:
- 在提交代码以前,我们需要先pull一下,实际开发,多用pull
生成秘钥
- ssh-keygen -t rsa
- 进入到任意目录,通过git bash 执行以上命令
- 直接回车。。 一顿回车以后,会生成对应的文件
- 找到公钥.pub 后缀名的文件
默认目录
Generating public/private rsa key pair.
Enter file in which to save the key (/**c/Users/tujunxiong/.ssh/id_rsa**):
- 进入到github ,右上角头像–>settings –> 左边SSH and GPG keys –> new SSHKey
- 将公钥数据 xxx.pub 内容粘贴到key框内 –> 点击 add SSH key
- git push 的时候 选择SSH的路径,复制下来就ok了
对称加密和非对称加密
使用github搭建个人博客
- 1:我们将代码push到gh-pages分之下,然后就可以使用了
- gh-pages,如果把代码上传到这个分支上就可以使用浏览器渲染访问。
- 访问的地址形式:
[github用户名].github.io/[仓库名]/[具体的文件或者路径]
丧心病狂的日志
- 别名对象全局 aliase
- 粘贴下面这部分代码就可以了
- git config –global alias.lg “log –color –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit”
命令总结
git init
初始化git add
添加暂存区git status
查看状态git rm --cached ./文件
git rm -r --cached ./文件夹名
删除暂存区数据git commit -m "消息"
提交带代码仓库(版本库)git config user.name "值"
按仓库声明变量git config --global user.name "值"
全局声明,在哪个仓库都能用git config [--global] --list
查看变量git config unset user.name
删除git config --replace-all user.name 值
修改git log [--oneline]
显示提交日志git reflog
显示当前做过的操作git reset --hard HEAD~0 [版本号]
回退版本,修改时间指针,不建议使用git branch 分支名称
创建分支git branch
查看分支git checkout 分支名
切换分支git branch -d 分支名
删除分支git merge 分支名称
合并分支git commit -a -m "消息"
添加并提交所有代码(首先必须先提交过)git checkout -b 分支名称
创建并切换分支git push 地址 [分支名]
推送数据到服务器git clone 地址 [创建的文件夹名称]
复制一个仓库git pull 地址 [分支名称]
拉下一个仓库及代码git config alias.xx "具体的命令"
别名- 以上命令中 最常用的是checkout 版本号,和add,commit,push,pull
-
git补充
diff
- 当我们在当前行添加一行的时候,其实是在行尾添加了\r\n
- git对比版本数据的时候,会把之前的行数据删除掉,然后添加进新的内容(其实是原来的内容加上\r\n)
图形化工具
- gitk
- 解决乱码git config –global gui.encoding utf-8
tag
git标签分为两种类型:轻量标签和附注标签。轻量标签是指向提交对象的引用,签附注标则是仓库中的一个独立对象。建议使用附注标签。
# 创建轻量标签
$ git tag v0.1.2-light
# 创建附注标签
$ git tag -a v0.1.2 -m "0.1.2版本"
- 1:
git init
- 2: 数据发生改变
- 3:
git add .
- 4: 提交到版本库
git commit -m "msg"
- 5: 打标签
git tag -a 版本号(v1.1) -m "msg"
- 6: 想查看所有标签
git tag
- 7: 查看标签明细
git show 版本号(v1.1)
- 8: 切换版本
git checkout 版本号(v1.1)
- 9: 连带tag一起推送到服务器
git push 地址 分支 --tags