Git
一、简介
1. 是什么
最先进的版本控制系统
Bitkeeper 是最初的版本控制器, 是商业用途, 后来在开放linux时被破解
-
git以行为单位, 进行检测, 控制
-
svn(也是一个版本控制系统) 为集中式
- 依赖中央仓库, 一旦中央仓库出现问题, 风险太大
-
git为分布式
- 每个人都是一个节点
- 也拥有中央仓库, 方便合并
2. 作用
- 版本还原
- 分支管理 (很快, 只需移动指针)
- 协同开发 (自动合并, 手动解决冲突)
- 版本记录
- 历史追踪
- 权限管理
3.1 配置设置
1. 设置用户名和邮箱
a、git config --global user.name lianzp #设置用户名
b、git config --global user.email liazp@atguigu.com #在开发过程中,写实际的邮箱地址
2. 查询配置及查询配置所在的路径
a、git config --list #查询配置信息
b、 git config --list --show-origin #查询配置文件所在的位置
3. 初始化本地库
a、git init
4. 取消换行符转换的warning提醒 #Windows下的换行符为\nf,而在linux下是\n
a、git config core.autocrlf false
命令 | 含义 |
---|---|
git config --list | 查看所有配置 |
git config --list --show-origin | 查看所有配置以及所在文件位置 |
git config --global user.name xxx | 设置git用户名 |
git config --global user.email xxx | 设置git邮箱 |
git init | 初始化本地库 |
git config core.autocrlf false | 取消换行符转换的warning提醒 |
3.2 配置级别
有三个级别:
1. 系统默认,位于git安装路径下;
2. 用户配置:在c盘下;
3. 项目配置:在当前项目仓库的配置文件中。
3.3 Git三个概念
三个概念:
1.工作区(Working Directory):就是你电脑本地硬盘目录
2.本地库(Repository):工作区有个隐藏目录.git,它就是Git的本地版本库
3.暂存区(stage):一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)
二、git的基本操作
1. 把一个目录初始化成一个本地仓库
1. 新建一个本地仓库, 也就是一个文件夹
2. 执行 git init命令
3. 本地仓库会多一个.git的隐藏文件夹
4. 所有命令要在初始化过的文件夹目录下操作
2. 常用命令
命令 作用
git status 查看本地库的状态(git status -s 简化输出结果)
git add [file] 多功能命令: 1. 开始跟踪新文件
2. 把已跟踪的文件添加到暂存区
3. 合并时把有冲突的文件标记为已解决状态
git commit –m “xxx” [file] 将暂存区的文件提交到本地库,-m 后面为修改的说明
3. 三个区域转换
- 工作区(Working Directory):就是你电脑本地硬盘目录
- 本地库(Repository):工作区有个隐藏目录.git,它就是Git的本地版本库
- 暂存区(stage):一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
4. 忽略文件
- 一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。
- 通常都是些自动生成的文 件,比如日志文件,或者编译过程中创建的临时文件等。
- 在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件的模式。
--1. 使用场景
a、当有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表种时。
--2. 实现方式:
a、创建".gitignore" 的文件,列出要忽略的文件的模式 --文件的名字不能错
b、模式匹配规则
# 忽略所有的.a 文件
*.a
# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a
# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO. 不递归的忽略
/TODO
# 忽略任何目录下名为 build 的文件夹 递归的忽略
build/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf
5. 版本的切换
- git reset --hard HEAD^
- git reset --hard HEAD~n
- git reset --hard [具体版本号,例如:1f9a527等]
相关命令:
命令 作用
git log 以完整格式查看本地库状态(查看提交历史)
git log --pretty=oneline 以单行模式查看本地库状态
git reset --hard HEAD^ 回退一个版本
git reset --hard HEAD~n 回退N个版本
git reflog 查看所有操作的历史记录
git reset --hard [具体版本号] 回到(回退和前进都行)指定版本号的版本,
git checkout -- [file] 从本地库检出最新文件覆盖工作区的文件(文件还没有提交到暂存区, 否则无效)
git reset [file] 或者 git restore –staged [file] 从暂存区撤销文件
git restore <file> 放弃在工作区的修改(还没有提交到暂存区)
git rm --cache [file] 撤销对文件的跟踪.
注意:
-
在 Git 中任何已提交的东西几乎总是可以恢复的
-
任何你未提交的东西丢失后很可能再也找不到了
6. 删除操作
- 文件夹内删除
- git add .
- git commit -m “delete”
7. 比较文件
减号和加号分别代表两个对比的文件!
- $ git diff
- 将工作区中的文件和暂存区进行比较
- $ git diff HEAD
- 将工作区中的文件和本地库当前版本进行比较
- git diff --cached
- 查看暂存区和本地库最新提交版本的差别
8. git目录
9. 分支操作
命令 描述
git branch [分支名] 创建分支
git branch -v 查看分支,可以使用-v参数查看详细信息
git checkout [分支名] 切换分支
git merge [分支名] 合并分支;
将merge命令中指定的分支合并到当前分支上
例如:如果想将dev分支合并到master分支,那么必须在master分支上执行merge命令
如果在dev分支上面,对一个文件做了修改,这个时候master分支上面对应的文件是没有修改信息的。
因此需要将分支合并!
git branch –d[分支名] 删除分支
注意:必须切换到master,才能删除,不能自杀!
git checkout –b [分支名] 新建并切换到当前分支
git log --oneline --decorate --graph --all 它会输出你的提交历史、各个分支的指向以及项目的分支分叉情况
概念:
- 不使用分支,就是人与人之间协作;
- 使用分支,就是小组与小组之间的协作;
- 从主干中拉取分支,开发完成,将工作,合并到主干。
10. 分支冲突
问题: 当同时编辑一个文件时, 主分支和其他分支同时修改了同一行, 则合并时会引起冲突.
解决: 编辑冲突的文件,把“>>>>>>>>>”、“<<<<<<”和“========”等这样的行删除,编辑至满意的状态,提交。
提交的时候注意:git commit命令不能带文件名。
三、github (没有外网的可以用 gitee 功能差不多)
1. 本地连接Github
1. 创建一个密钥对
ssh-keygen
2. 复制公钥
catch ~/.ssh/id_rsa.pub
3. 粘贴到github中的ssh keys中
4. 测试
ssh -T git@github.com
流程:
从本地和github通讯, 有两种方式:
1. 使用https
2. 使用ssh
推送:
1. 先建一个远程仓库
2. 给远程仓库起个别名
3. 推送
新员工入职:
1. 拿到所有代码
协作冲突:
当两个人修改了共一个行会发生冲突.
谁先push, 谁成功!
解决:
1. 后push要拉倒最新的版本()
2. 然后解决冲突
2. push
本地库推送到GitHub
①准备本地库
②在GitHub上创建一个仓库
③增加远程地址
git remote add <远端代号> <远端地址>
<远端代号> 是指远程链接的代号,一般直接用origin作代号,也可以自定义;
<远端地址> 默认远程链接的url;
④本地库推送到远程库
git push -u <远端代号> <本地分支名称>
<远端代号> 是指远程链接的代号;
<分支名称> 是指要提交的分支名字,比如master;
我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
⑤查看远程分支
git remote –v
3. pull
本地库抓取远程库
如果远程库的版本新于当前库,那么此时为了使当前库和远程库保持一致,可以执行pull命令
git pull <远端代号> <远端分支名>;
例 git pull origin master
4. clone
实际的情况可能是刚开始做项目的时候,需要从远程库将项目先整到本机。
执行命令:git clone <远端地址> <新项目目录名>
<远端地址> 是指远程链接的地址;
<项目目录名> 是指为克隆的项目在本地新建的目录名称,可以不填,默认是GitHub的项目名;
命令执行完后,会自动为这个远端地址建一个名为origin的代号。
例 git clone https://github.com/user111/Helloworld.git hello_world
5. 解决冲突
尽量避免冲突:
- 尽量不要修改同一文件
- 如果多个人修改同一文件, 最好的办法, 找一个专人负责修改公共文件.
- 每次写代码之前, 先更新到最新 版本. 上班第一件事, 先pull
- 上传值代码之前, 也要先pull. 先把产生的冲突先解决, 再上传.
6. 邀请成员
7. 总结
四、github与idea
1. 上传到github
-
在idea中找到setting , 搜索git, 找到路径, 并关联github账号
-
vcs —> import into version control —> share project on github
-
勾掉.idea
-
vcs —> git —> add —> push
2. clone 到idea
- checkout from vresion control
- 输入clone地址
- 点更新/pull
注:gitee的idea配置与github差不多
五、gitee
5.1本地库联通gitee
①查看本地是否配置了密钥
只需要在第一次配置就可以了,如果存在就不需要额外生成密钥
②生成密钥
命令:
ssh-keygen
生成密钥:
生成的密钥分为私钥和公钥,会保存在用户家目录的.ssh文件夹中。
其中,id_rsa是私钥,id_rsa.pub是公钥。
将公钥告诉gitee账户,相当于约定一个接头暗号!
进入gitee的账户,
测试本地仓库和gitee的联通性:ssh -T git@gitee.com
.ssh文件夹中会多一个文件known_hosts,其中记录了连接的github的ip账号。
5.2clone(下载资源)
执行命令:git clone <远端地址> <新项目目录名>
git clone git@gitee.com:on88888/git_on0726.git
在本地库添加文件(文件夹)后上传远程端
1. 提交最新变化
git add new_file
git commit -m '注释操作意义'
2.上传到远程端
git push origin master
注:origin 代指 git@gitee.com:on88888/git_on0726.git 这个地址
master 代指 本地(localhost)