1. svn(集中式)与git(公布式)的区别
1.1 svn(集中式)
svn 因为每次存储的都是差异 需要的硬盘空间会相对的小一点 可是回滚的速度会很慢
-
优点
- 代码存放在单一的服务器上,便于项目的管理
- 学习起来相对git简单
-
缺点
- 服务器宕机:员工写的代码得不到保障
- 服务器炸了:
整个项目的历史记录都会丢失
1.2 git(分布式)
git 每次存的都是项目的完整快照,需要硬盘空间相对大一点 (Git团队对代码做了极致的压缩 最终需要的实际空间比svn多不了太多 可是Git的回滚速度极快)
-
优点
- 完全的分布式
- 不易丢失:可以托管在服务器上(并且每个人电脑里都有所有版本记录), 本地/服务器电脑坏了也不怕
- 易于对比: 可以清楚区分文件改动和变化 。
- 易于回溯:可以回到某个记录状态上查看文件。
- 断网也可以在本地保存(但是等连网才能上传到中心服务器同步给他人)
-
缺点
- 学习起来比Svn陡峭
2. git是什么
-
git是一个版本管理控制系统软件 ,它可以在任何的时间点上,将文件的状态记录保存起来,也可以根据某个时间点,将文件恢复回来。(白话:文件管理器)
-
优点
- 不易丢失:可以托管在服务器上(并且每个人电脑里都有所有版本记录), 本地/服务器电脑坏了也不怕
- 易于对比: 可以清楚区分文件改动和变化 。
- 易于回溯:可以回到某个记录状态上查看文件。
- 断网也可以在本地保存(但是等连网才能上传到中心服务器同步给他人)
-
3, 安装git
-
-
默认全都下一步即可完成安装
-
打开cmd终端, 输入命令
git --version(注意中间空格是必须的)- 如果出现版本号, 就代表git软件成功安装到了你的电脑中
4. git的基本工作流程
| 工作区 | 暂存 区 | git仓库(本地仓库) |
|---|---|---|
| 被git管理的项目目录 | 执行 git add .临时保存文件 | 执行git commit -m '提交说明' 保存到本地 |
5. git使用前的配置
-
在使用 git 前,需要告诉 git 你是谁,在向 git 仓库中提交时需要用到。
-
具体做法:(全局配置)
-
任何文件夹,空白处,右键 --> Git Bash Here
-
配置提交人姓名:
git config --global user.name '提交人姓名' -
配置提交人姓名:
git config --global user.email '提交人邮箱' -
查看git配置信息:
git config --list
-
-
注意
- 如果要对配置信息进行修改,重复上述命令即可。
- 配置只需要执行一次。
- 悄悄告诉你,提交人姓名和提交人邮箱可以随便写,但是格式要对哦
-
-
提交步骤
-
git init //初始化git仓库 -
git status //查看文件状态 -
git add . //文件列表` 追踪文件 -
git commit -m '提交信息' // 向仓库中提交代码 -
git log //查看提交记录 git log --oneline //查看提交记录--在一行简略显示详细步骤:
-
创建一个项目文件夹,打开项目文件夹,右键-->Git Bash Here。。
注意:一定要在项目文件夹,右键-->Git Bash Here。 -
执行
git init初始化,会生成.git文件夹,用来管理项目文件夹注意:.git文件是隐藏的很重要,每一次的记录状态都保存在着,不能删除
只有项目文件夹中没有==.git==才需要git init初始化
mac系统: shift+Commend+. 可以显示隐藏文件 -
执行
git add .(add后面有个点)保存到 暂存区,再执行git commit -m ‘提交说明’注意:空文件件不能暂存 -
执行完这==两====个命令====,才表示记录一次文件状态和向本地仓库提交一次代码
注意:必须完成这个两个命令才算向仓库提交一次代码,
-
-
5. git进阶
-
分支
-
为了便于理解,暂时可以认为分支就是当前工作目录中代码的一份副本。
使用分支,可以让我们从开发主线上分离出来,以免影响开发主线。
-
-
分支细分
-
主分支(master):第一次向 git 仓库中提交更新记录时自动产生的一个分支。
-
开发分支(develop):作为开发的分支,基于 master 分支创建
-
功能分支(feature):作为开发具体功能的分支,基于开发分支创建
-
功能分支 -> 开发分支 -> 主分支
-
-
分支命令
-
git branch // 查看所有分支 git branch -a //查看远程仓库所有分支 -
git branch 分支名称 // 创建分支 git branch -d 分支名称 // 删除本地分支(分支被合并后才允许删除)(-D 强制删除:谨慎使用-D) git push origin --delete 远程分支名 //删除远程分支 -
git checkout 分支名称 //切换分支 切换分支之前必须把当前分支代码全部提交到仓库 git checkout -b 分支名称 // -b 切换分支 的同时创建分支 -
git log //命令可以显示所有提交过的版本信息 git log --oneline //命令可以显示所有提交过的版本信息 --提交远程的版本信息 git reflog //可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作) -
git merge 来源分支 // 合并分支 合并之前切换到主线master 再执行命令合并 ----不保留分支的commit历史 git merge --no-ff 来源分支 // --no-ff,保留分支的commit历史 git merge --squash 来源分支 // --squash,把多次分支commit历史压缩为一次 -
// 如果你想重置(回退)到某一版本,可以将 `--hard` 改为具体的Commit的id如: git log //可以查看具体的commit的id git reset 1d7f5d89346 //回退到某一版本但保存自该版本起的修改 git reset --hard 1d7f5d89346 //回退到某一版本并且放弃所有的修改 -
//将分支推送到远程码云上,先切换到分支上,在执行 git push -u origin 分支名称 git checkout 分支名称 // 先切换到分支上 git push -u origin 分支名称 //将分支推送到码上 -
git commit --amend //commit 提交后,修改此次的提交说明 -
//相当于指定分支的代码与当前分支的代码合并到了一起。 git pull origin 分支名称 -
//克隆指定分支的代码。 git clone -b 分支名称 项目地址 -
git tag -a 标签名 分支名 //为当前提交位置设置一个别名 git push --tags //将本地标签名同步至远程仓库
-
暂时保存更改
-
在git中,可以暂时提取分支上所有的改动并存储,让开发人员得到一个干净的工作副本,临时转向其他工作。
-
使用场景:分支临时切换
- 存储临时改动:
git stash - 恢复改动:
git stash pop
- 存储临时改动:
-
-
在git 在pull或者合并分支的时候有时会遇到这个界面
- 存储临时改动:请输入提交消息来解释为什么这种合并是必要的
1. 按键盘字母 i 进入insert模式2. 按键盘左上角"Esc"3. 输入 :wq! 注意是冒号 + wq!,按回车键即可 //wq!为强制保存 输入 :q! // q! 为强制退出 此界面 -
-
合并冲突
-
在多人同时开发一个项目时,如果两个人修改了同一个文件的同一个地方,就会发生冲突。冲突需要人为解决。
-
查看代码冲突的代码,解决:找到对方是谁,商量删除谁的,还是都保留下来
-
-
其他问题
-
如出现认证失败或无权限
-
解决方法--本机电脑的凭据进行修改
git的凭据
-
6. 远程仓库
-
注册码云(gitee)账号
-
码云和github都提供仓库的托管服务。
区别:是码云是国内的服务器,打开速度较快;github是国外的服务器,打开速度不能保证。
码云:gitee.com/ - 使用这个
github:github.com/
-
-
配置码云的SSH秘钥
-
秘钥就是一个钥匙, 开门的作用 (免登陆)
-
任何文件夹位置,空白处右键,选择右键菜单中的 “
Git Bash Here”,执行下面的命令,可以生成SSH秘钥(包含一个公钥一个私钥)- 公钥名称:id_rsa.pub
- 私钥名称:id_rsa
-
ssh-keygen -t rsa -C "xxxxx@xxxxx.com" //执行命令生成秘钥文件- ssh-keygen 固定命令, 生成秘钥文件
- -t 指定秘钥类型 (加密方式 - rsa加密)
- -C 设置注释文字(如何联系你)
-
-
按照提示完成三次回车,即可生成 ssh key。通过查看电脑C盘
~/.ssh/id_rsa.pub文件内容,用vscode打开,复制里面全部的内容,配置到远程仓库-
Windows: C:\Users\用户名.ssh # 例如: C:\Users\lidongxu.ssh mac: 你的用户名那个文件夹中。 按shift+Commend+. 可以显示隐藏文件,然后就可以看到 .ssh文件夹了
-
-
复制生成后的 ssh key,通过仓库主页 「设置」->「SSH公钥」->「添加公钥」 ,添加生成的 public key 添加到仓库中。
-
添加后,在终端(Terminal)中输入
-
ssh -T git@gitee.com - 首次使用需要确认并添加主机到本机SSH可信列表。若返回
Hi XXX! You've successfully authenticated, but Gitee.com does not provide shell access.内容,则证明添加成功。
-
-
添加成功后,就可以使用SSH协议对仓库进行操作了。
-
-
创建远程仓库 - 获取SSH地址
-
gitee.com 首页登录后
-
右上角+号, 新建仓库
-
自己公司项目可不要公开啊,可能被敌对机构窃取
-
点击创建后 ==千万不要点初始化 Readme 文件==
-
推送代码到远程
-
解释后面两句
-
执行命令 - 本地添加远程仓库地址(远程分支名字叫origin, ==地址写你的, 别写我的==
git remote add origin git@gitee.com:webping/wuheping.git -
remote 远程
-
add 添加
-
origin 源,这个名字可以自定义,叫什么无所谓。
-
最后,是ssh地址(注意,不是https地址)
-
-
推送命令
git push -u origin master前提远程仓库上什么都没有- push 推送
- origin 远程仓库地址,和上一条命令中的origin对应
- master,表示推送本地的master分支
- -u,首次推送需要 -u。(表示把本地的master和远程的master直接关联起来) ((全称叫upstream, 上传)
-
假如远程仓库有东西, 先拉取下来和本地仓库的文件合并了 (rebase是把远程的直接合并到本地master里)
git pull origin master --rebase- 再执行,
git push -u origin master
-
如果首次使用SSH,会出现一个SSH警告,提示如下
-
如果提示 “
Are you sure you want to continue connecting (yes/no/[fi....])”-
输入yes,回车
-
-
-
==如果出现一句红色的警告提示:你没有权限请问远程仓库。==
- 可能是私钥设置的不对,建议你重新配置私钥
- 重新配置私钥后,需要将隐藏的
.git文件删除(里面保存着第一次错误的公钥,所以需要手动删除) - 重新初始化一个
.git文件,再次重新推送代码
-
注意:一个远程仓库只能放一个本地仓库
-
7. 拉取远程仓库代码到本地
-
克隆远程仓库到本地
-
实际开发中,有些时候,我们需要把一个远程仓库克隆到本地
- 开发项目的时候,可以先创建远程仓库,然后克隆到本地,再进行开发
- 下载别人的代码的时候,可以选择克隆
- 多人合作开发的时候,需要克隆合作伙伴的代码到本地
- 直接执行克隆命令(不需要初始化
.git)
-
通过SSH协议克隆
git clone git@gitee.com:zxzllyj/sample-project.git以克隆仓库
git@gitee.com:zxzllyj/sample-project.git为例(注:本处使用的是ssh地址,因为演示机已经配置好ssh公钥,故可以使用ssh地址,如果您没有配置公钥,请使用https地址)==注:上图的方法虽然将仓库完整的拉取了下来,但是仅仅只会是显示默认分支,如果需要直接到指定的分支,可以在仓库地址后面加上分支名==
-
如果克隆的是自己的仓库,那么克隆之后,可以对代码进行修改,修改之后,直接
add、commit、pull、push即可。
-
8. Git配置多个SSH-Key
-
当有多个git账号时,比如:
- a. 一个gitee,用于公司内部的工作开发; b. 一个github,用于自己进行一些开发活动;
-
解决方法
-
生成一个gitee公司用的SSH-Key
$ ssh-keygen -t rsa -C 'xxxxx@company.com' -f ~/.ssh/gitee_id_rsa-f ~/.ssh/gitee_id_rsa 用来生成指定的文件名
-
生成一个github用的SSH-Key
$ ssh-keygen -t rsa -C 'xxxxx@qq.com' -f ~/.ssh/github_id_rsa -
在 ~/.ssh 目录下新建一个config文件,添加如下内容(其中Host和HostName填写git服务器的域名,IdentityFile指定私钥的路径)(如果两个都是gitee的ssh-key最前面的gitee会生效,哪个需要匹配就把哪个gitee-ssh-key配置代码放置最前面)
# gitee Host gitee.com HostName gitee.com PreferredAuthentications publickey IdentityFile ~/.ssh/gitee_id_rsa # github Host github.com HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/github_id_rsa -
用ssh命令分别测试
$ ssh -T git@gitee.com $ ssh -T git@github.com这里以gitee为例,成功的话会返回下图内容
-
9.小结
-
执行
git init在项目文件夹中初始化一个==.git文件==,作用是用来管理这个项目文件夹 -
执行
git add .暂存文件 -
执行
git commit -m ‘提交信息’保存在本地仓库-
如果没有配置公钥,需要先配置
-
再执行下面两条命令,让本地仓库与远程仓库建立联系
git remote add origin git@gitee.com:webping/wuheping.git git push -u origin master
-
-
如果远程仓库有代码或文件 需要
git pull必须要先拉取- 拉取之后,如果有冲突,需要解决冲突,在必须
add commit -m ‘提交信息’一次
- 拉取之后,如果有冲突,需要解决冲突,在必须
-
最后推送。
git push即可把自己写的代码推送到远程仓库中。
9. Github
你可以把远程仓库想象成一个 “文件管理服务器”,利用这个服务器可以与开发团队的其他成员进行数据交换。
Github同gitee的操作大同小异
9.1 注册
-
地址:github.com/ 访问github首页,点击 Sign up 连接。(注册)
-
填写用户名、邮箱地址、GitHub登陆密码
-
选择计划
-
填写 GitHub 问题
-
验证邮箱
-
GitHub 个人中心
9.2 创建仓库
-
填写仓库基本信息
-
将本地仓库推送到远程仓库
9.3 SSH免密登陆
-
生成秘钥:
ssh-keygen -
秘钥存储目录:C:\Users\用户.ssh
-
公钥名称:id_rsa.pub
-
私钥名称:id_rsa
9.4 ==剩下的操作在上面的码云(gitee)有介绍==
10. 图形化界面 (简略介绍)
- vscode
- webstorm
- sourceTree(最新版的sourceTree,低版本的windows可能安装不上)
- 小乌龟(windows系统能用)
10.1 vscode
-
暂存文件(git add .)
-
提交到本地仓库
-
推送 (git push)
11. Gitee Pages
gitee pages 是一个免费的静态网页托管服务
注意 仓库必须有index.html文件才能查看
11.1 使用前须知
1、==仓库必须有 index.html 才可以正常访问==
2、静态网页的样式可以自己写,也可以拿一些静态模版来修改,Pages服务本身不提供任何形式的模版,但我们后续会陆续增加例子,供大家参考使用。
-
访问生成的网站地址,即可以查看你部署的静态页面啦!