| GIT搭建服务器 | |
| --- | --- |
| yum -y install git | 安装git服务 |
| git --version | 查看git服务器版本(windowns 客户端通用,查看Windows下的版本) |
| id git用户名 | 查看git用户 |
| useradd git用户名 | 创建git用户 |
| passwd git | 设置git用户的密码 |
| mkdir -p /home/git/.ssh/authorized_keys | 创建存放公钥的文件 |
| 配置文件 | vim /etc/ssh/sshd.config |
| --- | --- |
| 打开以下三个配置的注释 | -- |
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
保存并重启 sshd 服务
systemctl restart sshd.service
| 初始化Git仓库 |
| --- | --- |
先选定一个目录作为Git仓库,假定是/home/git/socket.git
mkdir -p /home/git
git init --bare socket.git
| 服务器仓库同步到站点 |
| --- | --- |
cd /socket.git/hooks
touch post-receive
vim post-receive
把下面的路径放入到文件(/www/web/socket/public_html为要同步的路径)
git --work-tree=/www/web/socket/public_html checkout -f
赋予x执行权限
注意:
/www/web/socket/public_html该目录最低733权限,也就是需要写权限,不然报错
| GIT客户端 |
| --- | --- |
| 生成公钥 |
ssh-keygen -t rsa -C "247958201@qq.com"
把公钥导入到服务器/home/git/.ssh/authorized_keys
cat /home/git/id_rsa.pub >> /home/git/.ssh/authorized_keys(没用)
ssh git@192.168.182.132 'cat >> .ssh/authorized.keys' < ~/.ssh/id_rsa.pub
| 客户端介绍 | |
| --- | --- |
| 工作区 | 即本地操作的文件和目录 |
| 缓存区 | 即git add .操作,把add的文件或者目录加入到缓存区 |
| master | 即master分支,在git commit -m 之后把add的文件或者目录提交到master分支,HEAD为master本地版本库的指针,缓存区和master在.git下面,即本地的版本库 |
| 注意事项 | 以扩展名.md,.mkd,.mkdn,.mdown,.markdown等为结尾的文件,均以Markdown标记语言语法进行解析并显示 |
| 连接远程仓库准备工作 |
| --- | --- |
1、查看电脑上是否已经存在SSH密钥,有则跳过步骤2
(1)cd ~/.ssh 或者 cd /c/Users/Administrator/.ssh
(2)cat id_rsa.pub
2、如果不存在公钥或目录,则从新生成
ssh-keygen -t rsa -C "your_email@youremail.com"
(1)执行这条命令会提示文件保存路径,可以直接按Enter
(2)然后提示输入 passphrase(密码),输入两次(可以不输直接两次Enter)
(3)然后会在 .ssh 目录生产两个文件:id_rsa和id_rsa.pub
3、用记事本打开.ssh目录下的id_rsa.pub文件,复制里面的内容或者cat id_rsa.pub命令直接复制内容
4、复制ssh key到github:(这一步是到github的,如果自己有搭建git服务器,则可以直接去服务器上(CentOS)
将id_rsa.pub内的公共秘钥导入到到/home/git/.ssh/authorized_keys文件里,一行一个。)参考网址:廖雪峰的官方网站搭建git服务器
5、打开github网站,点击右上角扳手图标,然后点击左边菜单的 ssh key, 然后右边页面的 add ssh key,将复制的内容粘贴到github的key中,title可以不填,直接保存即可。(On the GitHub site Click “Account Settings” > Click “SSH Keys” > Click “Add SSH key”)
| 用户信息配置 |
| --- | --- |
查看自己的git配置信息
git config --list
设置用户名和邮箱地址,不带--global参数则只对本地lingwei版本库进行设置
git config --global user.name "lingwei" #此处name可修改且也不是用于登录github的登录名
git config --global user.email "247958201@qq.com"
| 查看,关联,删除远程仓库 | |
| --- | --- |
| git init | 初始化(直接克隆则不需要初始化) |
| git remote -v 或 git remote | 查看远程库信息 |
| git remote add origin git@gitee.com:tp_lingwei/lingwei.git | 关联码云远程仓库 |
| git remote rm origin | 删除已有的GitHub远程库,(origin为远程仓库的名字) |
| ssh -T git@gitee.com | 检测是否连接到远程仓库,出现Successfully就OK |
| 推送、拉取、克隆 | |
| --- | --- |
| git push -u origin master | 把缓存区内容推送到远程仓库(参数-u为第一次推送) |
| git pull origin master | 与GitHub远程仓库同步 |
| git clone git@gitee.com:tp_lingwei/lingwei.git | 从远程仓库克隆 |
| 文件、目录、缓存区目录或文件操作 |
| --- | --- |
1、删除工作区文件,且删除本地版本库里的文件,先删除工作区,通过git status可查状态,再提交到本地版本库
(1)git rm <file>
(2)git commit -m ''
或者
(1)rm -rf <file> #linux的删除
(2)git add <file>
(3)git commit -m ''
2、从工作目录中删除文件(参数-f为强制删除)
git em -f <file>
3、重命名或者移动
git mv <file> <newfile>
4、删除本地文件或者目录,参数-r为删除目录时递归删除文件
(1)git rm [-r] file
(2)rm -rf file(这个为linux命令,强制删除)
5、删除缓存区的文件
git rm --cache <file>
6、查看文件修改的地方
git diff <file>
| 提交上传流程 |
| --- | --- |
1、查看仓库的状态,不加参数-s则输出详细的信息
git status [-s]
注释
git status -s
?? <file> #问号表示该文件未被追踪,表示新创建的文件
未commit提交(咱未提交到版本库里)
A <file> #A表示文件加入到缓存
AM <file> #AM(前绿后红)表示该文件在我们将它添加到缓存之后又有改动
已commit提交(版本库里已存在)
M <file> #红色M表示该文件在我们将它添加到缓存之后又有改动,绿色M表示该文件已加入到缓存
MM <file> #MM(前绿后红)表示该文件在我们将它添加到缓存之后又有改动
D <file> #问号表示该文件在工作区已删除
2、加入到缓存区,(.为把修改的文件全部提交到缓存,或者直接指定文件路径)
git add .[<path/file>] 或 git add -A
3、commit提交,也可以称之为快照(''分号里面的是注释)
(1)git commit -m 'note'
(2)git push -u origin master(参数-u为第一次推送)
| 版本回退 |
| --- | --- |
在把缓存区的文件commit之后,会生成一个commit_id(版本号),以作识别版本回退
1、查看历史版本,获取要回退的版本id,参数--pretty=oneline显示更优美
git log [--pretty=oneline]
2、开始回退,参数HEAD为当前版本,HEAD^为上一个版本,HEAD^^为上上个版本,以此类推,也可以写成HEAD~10(前10个版本)
git rest --hard [HEAD[^]] 历史版本id
3、git push -f -u origin master (把修改推送到远程服务器)
4、回退出错,返回退(反撤销),页面没关可找到要反回退的版本id,找不到则执行以下命令
git reflog
5、找到要反回退的版本id
git reset --hard <commit id>
6、比对工作区和commit提交到本地版本库的文件
git diff HEAD -- <file>
| 日志操作 |
| --- | --- |
1、查看commit的日志(从近到远),可看到commit的id,参数--pretty=oneline显示更优美
git log [--pretty=oneline]
2、查看每一次操作的日志,记录你的每一次命令
git reflog
3、把本地未push的分叉提交历史整理成直线
git rebase
| 撤销修改 |
| --- | --- |
1、查看未被传送到远程代码库的提交描述和说明
git cherry -v
2、撤销未被传送到远程代码库的提交
git reset commit_id
3、撤销工作区文件的修改(删除),即这个文件回到最近一次git commit或git add前的状态
git checkout -- <file>
4、把提交到缓存区的文件撤回到git add 之前的状态,再用上一条命令,撤销工作区文件修改至本地仓库一致
(1)git reset HEAD <file>
(2)git checkout -- <file>
| 对比操作 |
| --- | --- |
1、比对工作区的文件和commit提交到本地版本库的文件
git diff HEAD -- <file>
2、显示已写入缓存与已修改但尚未写入缓存的改动的区别,即修改的详情
git diff
3、查看已缓存的改动,命令会告诉你有哪些内容已经写入缓存了
git diff –-cached
4、查看已缓存的与未缓存的所有改动,查看工作目录与上一次提交的更新的区别,无视缓存
git diff HEAD
5、显示摘要而非整个 diff,不想要看整个 diff 输出,但是又想比 git status 详细点, 就可以用 --stat
git diff –-stat
| 分支管理 |
| --- | --- |
1、创建分支并切换分支(<branch name>==分支名)
git checkout -b <branch name>
或者
(1)git branch <branch name> #添加分支
(2)git checkout <branch name> #切换分支
2、查看当前分支(列出所有分支,当前分支前面会标一个*号)
git branch
3、合并分支
git merge <branch name>
4、删除分支
git branch -d <branch name>
* 分支合并问题
场景
1、修改分支dev中<file>并git add . 和git commit -m
2、切换回主分支再修改<fiel>并git add . 和git commit -m
3、合并报错,起冲突
解决方法
1、cat <file>
2、直接修改文件的内容
3、git add . 和git commit -m
4、删除分支dev即可
* 查看分支合并情况
git log --graph --pretty=oneline --abbrev-commit
* 合并分支策略
场景
1、合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息
2、如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息
3、--no-ff方式的git merge
解决方法
(1)git checkout -b dev
(2)修改文件并git add . 和git commit -m
(3)git checkout master
(4)git merge --no-ff -m '' dev #--no-ff参数(普通模式合并),表示禁用Fast forward;因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去
* 修复bug合并分支策略
场景
1、正在dev分支修改
2、又需要修复bug,又不想提交dev分支
3、dev分支开发时间还很长,修复bug紧急
解决方法
1、利用stash功能,把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash
2、切换到主分支,再创建另外一个临时分支issue
(1)git checkout master
(2)git checkout -b issue
3、在issue临时分支处理完并git add . 和git commit -m,再切换到主分支合并
(1)git add .
(2)git commit -m '解决完bug提交'
(3)git checkout master
(4)git merge --no-ff -m '解决完bug合并' issue
4、切换回dev分支继续之前的工作,先查看工作现场
(1)git checkout dev
(2)git stash list
5、恢复dev分支的工作现场
方法一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除
(1)git stash apply #git stash apply stash@{0}
(2)git stash drop
方法二是用git stash pop,恢复的同时把stash内容也删了
git stash pop
6、再次查看工作现场检查是否存在内容,再查看工作区的状态
(1)git stash list
(2)git status
7、正常之后继续工作
* 删除一个没有合并的分支
场景
1、分支dev开发完并git add . 和git commit -m
2、切换回主分支,再删除dev分支
解决方法
不能用正常删除分支的方法,不然报错,需强行删除
git branch -D <branch name>
* 多人协作
1、都使用分支来开发
(1)通过克隆或者连接远程仓库pull拉取
克隆
git clone git@gitee.com:tp_lingwei/lingwei.git
连接远程pull
(1)git remote add origin git@gitee.com:tp_lingwei/lingwei.git
(2)git pull origin master
(2)都创建分支dev
git checkout -b dev
(3)操作开发完,git add . 和git commit -m '',再push
git push orgin dev
2、如果两人修改同一个文件,则后面push出现报错3的问题
解决方法
(1)git pull如果报错执行2步骤
报错提示
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> dev
原因
没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接
(2)git branch --set-upstream-to=origin/dev dev
(3)如果合并起冲突,按照上面的解决方法处理,处理完执行以下方法
(1)git commmit -m ''
(2)git push origin dev
| 报错案例 | |
| --- | --- |
1、执行ssh -T git@gitee.com报
Host key verification failed.
解决方法
ssh-keyscan -H github.com >> ~/.ssh/known_hosts
2、执行 git push -u origin master报以下错误
To gitee.com:tp_lingwei/lingwei.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'git@gitee.com:tp_lingwei/lingwei.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
解决方法
这是由于你新创建的那个仓库里面的README文件不在本地仓库目录中,这时我们可以通过以下命令先将内容合并以下:
git pull --rebase origin master
这时你再push就能成功了。
3、执行git push origin master报错
fatal: refusing to merge unrelated histories
解决方法
这是因为我们没有关联远程分枝master,需要使用操作:
git pull origin master --allow-unrelated-histories
4、执行git remote add origin git@gitee.com/tp_lingwei/lingwei.git
fatal: remote origin already exists
原因
这说明本地库已经关联了一个名叫origin的远程库
解决方法
(1)git remote -v查看远程库信息
(2)如果不是要添加的仓库则执行git remote rm origin
- LINUX命令
- 用户组和用户管理
- Linux文件共享服务
- Linux服务软件
- 网络管理
- ping不通
- Linux防火墙
- 解压缩
- vim编辑器
- GIT服务器
- GitLab
- 文件和目录命令
- 文件权限
- 文件属性
- 端口管理
- LInux基本命令
- ll
- screen命令
- sh 脚本
- 基本操作
- 磁盘管理
- vmware 磁盘扩容
- 基本目录介绍
- 调整分区
- 查看磁盘大小
- 统计文件大小
- 关机、重启
- 定时任务
- 定时任务排查
- 按秒执行脚本
- 执行php请求
- 环境变量
- 把php加入到环境变量
- 系统时间操作
- 进程管理
- CPU 管理
- TOP命令简介
- ps 命令介绍
- ps使用实例
- 报错管理
- ifconfig 报错
- fuser 报错
- 内存管理
- 查看内存
- PHP
- 函数管理
- Curl请求
- 加密函数
- 闭包函数
- php自定义函数
- 获取字符串首字母生成图片
- 字符串处理
- 隐藏部分字符串
- 字符串编码格式
- GB2312编码
- ASCII码介绍
- 随机生成汉字
- 编码转换函数
- 获取字符串首字母
- 全半角转换
- 字符串加、解密
- 字符串截取
- 数组处理
- 控制抽奖概率
- 二维数组转化为字符串
- 获取数组中最后一个元素
- 数组去重
- 数组排序
- 插件管理
- TCPDF
- PHP扩展
- Redis扩展
- TP5中使用Redis
- redis 服务不能开启
- CURl
- 魔术方法
- 系统函数
- PHP规范
- PSR-4
- 个人规范
- 数据表规范
- 系统常量、变量
- 常量PHP_SAPI与函数php_sapi_name()
- 进制转换
- ThinkPHP
- TP5.0
- 发送邮件
- TP5.1
- 控制器
- composer类库
- 通过json格式实现三级联动
- 查询语法
- model 模型
- PSR规范
- 导入导出
- CSV导出
- 文件目录操作
- 递归创建目录
- 文件大小单位转换
- 微信小程序
- 小程序支付
- 打印输出
- 日志操作
- 数据类型转换
- 数组转XML格式
- XML转数组
- 时间日期
- 计算时间差值的函数
- 计算程序运行时间
- 图片处理
- 图片压缩类
- Mysql
- 字段类型介绍
- 安装配置
- 数据库操作
- 数据表
- 查看创建表
- 创建表
- 插入数据
- 修改表
- 删除表
- 查询
- 时间查询
- 表的高级操作
- 视图
- 触发器
- 存储过程
- 事务
- 索引
- 存储引擎
- 数据库优化
- mysql中使用 where 1=1和 0=1 的作用
- 在线修改字段禁忌
- mysql配置文件
- mysql8.0新特性
- 数据库引擎
- Mysql 内置函数
- GROUP BY
- group_concat 函数的限制
- 远程连接
- 远程无法连接
- mysql远程连接问题
- mysql 导入导出
- mysql日志处理
- 性能优化
- Yaconf-高性能的配置管理扩展
- FTP上传opcache缓存
- 系统内置函数注意事项
- in_array()
- 并发和攻击
- sql防注入
- 防范csrf攻击
- XSS处理
- DDOS攻击和防范
- 日常报错
- 文件访问权限
- 专业术语
- PV、 UV、IP
- TPS、QPS、RT
- 安全配置
- 安全模式
- 报错处理
- open_basedir 报错
- PHP异常报错
- 类
- new static() 和 new self()区别
- 接口
- static::$val()和self::$val()介绍
- PHP中静态方法和实例化方法的区别
- 抽象类
- PHP函数include include_once require和require_once的区别
- final 关键字
- 内置迭代器类
- 命名空间和spl_autoload_register函数
- 修改类的私有成员属性
- php closure 的bind和bindTo
- trait 类
- php 正则
- php 正则函数
- 小案例
- foreach遍历数组
- 设计模式
- 单例模式
- 简单工厂模式
- 工厂模式
- 抽象工厂方法设计模式
- 使用简单工厂来优化抽象工厂模式
- 使用反射来优化抽象工厂模式
- 原型模式
- 适配器模式
- 对象适配器模式
- 桥接设计模式
- 装饰设计模式
- 组合设计模式
- 透明组合设计模式
- 安全组合设计模式
- 外观设计模式
- 享元设计模式
- 代理设计模式
- 模板设计模式
- 命令设计模式
- 迭代器设计模式
- 观察者设计模式
- 单元测试框架
- PHPUnit_Framework_TestCase
- Windowns
- 用户凭证
- 命令
- 设置电脑自动关机
- win文件共享
- excel表多人同时编辑
- 文件共享打开只读
- win 网络管理
- 电脑连接不上网络
- 法自动获取IP地址
- win10 进入安全模式
- 虚拟机
- vmware esxi集群
- Python
- 头部介绍
- 开始 工作
- 内置函数
- bytes
- 数据类型
- 位运算
- 字符串类型
- 清除空格或者填充
- 随机数
- 字符串编码
- python3 编码
- 判断是否为空,为None等
- 列表、元组、字典
- 数据处理
- 时间日期处理
- 获取下一个星期几
- 月份处理
- 函数
- 获取本地IP
- 判断当前是否可以联网
- 模块
- argparse 模块
- cookielib 模块
- urllib 爬虫模块
- types 模块
- subprocess 爬虫模块
- requests 爬虫模块
- Beautiful Soup 爬虫模块
- Xpath 爬虫模块与lxml 爬虫模块
- PhantomJS 爬虫模块
- xlrd 模块
- xlwt 模块
- 模块安装
- ssl 模块
- json 模块
- configparser 模块
- 文件操作
- 异常处理
- 面向对象
- 正则
- Mysql数据库
- Socket
- Sublime
- 数学
- 实例
- py进制转换
- 画图
- 画布详解
- 爬虫
- Python2爬取糗事百科段子
- Python2爬取百度贴吧
- python2无线网络掉线自动重连
- Python2抓取淘宝MM照片
- python2模拟登录淘宝并获取所有订单
- python2抓取爱问知识人问题并保存至数据库
- python2利用Selenium抓取淘宝匿名旺旺
- python2爬虫专用模块
- urllib 模块
- subprocess 模块
- requests 模块
- Beautiful Soup 模块
- Xpath 模块与lxml 模块
- PhantomJS 工具
- Selenium 工具
- PyQuery 工具
- 爬虫框架介绍
- PySpider 框架安装配置
- PySpider 的用法
- Scrapy 框架安装配置
- 爬虫之多进程和多线程
- 爬虫之多线程用法
- 爬虫之多进程用法
- 服务器代理
- python2
- python3
- 编辑器
- sublime
- 插件介绍
- Visual Studio Code
- 前端
- js或jquery初始化
- Vue
- 目录结构
- 环境搭建、安装
- 模块介绍与安装
- vue-axios + axios
- vuex
- vant-ui
- less
- vue 方法属性
- 前端字符串处理
- 字符串反转
- CSS
- 文本显示问题
- Jquery
- 遍历json对象
- ajax
- 获取节点
- select 操作
- 自定义函数
- in_array()
- 事件
- input事件
- 数组基本操作
- js判断是否为空
- js判断数组是否存在某个值
- 判断是否是数组
- js中json对象和字符串的转换
- 去重,过滤空数组
- 字符串基本操作
- 判断变量是否定义
- js时间日期
- 日期格式转时间戳
- Nginx
- nginx配置参数
- HTTP协议
- HTTP头部信息
- 浏览器缓存
- Content-Type类型介绍
- Content-transfer-encoding类型介绍