git
版本控制
版本控制(Revision
control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
主流的版本控制器有如下这些:
Git
SVN(Subversion)
CVS(Concurrent Versions System)
VSS(Micorosoft Visual SourceSafe)
TFS(Team Foundation Server)
Visual Studio Online
使用最多的是Git和SVN
本地版本控制
记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如RCS。
不能多台电脑同时修改一个项目文件。
集中版本控制
最知名的是SVN
所有的代码都储存在服务器上,每个人都需要先从服务器更新最新版本的项目文件,然后再修改项目,把代码提交到服务器上。
如果服务器故障,程序员就没办法从服务器获取最新的项目文件,每个人的计算机内只保存着,他最后一次修改的版本,导致每个人的进度和信息不同步。
分布式版本控制
最著名的是Git
值得一提的是,git是linux之父李纳斯·托沃兹(Linus Benedic Torvalds)花了两周时间开发出来的,为辅助 Linux 内核,替代 BitKeeper。
最新版本的项目文件会同步到所有人的计算机中。就算服务器坏了,也可以在计算机中找到最新版本的文件。
但是坏处是,每个人都掌握着完整的项目文件,安全性低。
Git和SVN的区别
1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs等的文件夹里。
3、Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
4、Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
5、Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1
哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
Git命令(配置略)
Git Bash:Unix与Linux风格的命令行
Git CMD:Windows风格的命令行
Git GUI:图形界面的Git
我觉得只要掌握一种就可以了,所以学习的是linux风格。
命令 | 含义 | 例子 |
---|---|---|
cd | 改变目录。 | cd 文件夹1 |
cd . . | 回退到上一个目录 | cd … |
pwd | 显示当前所在的目录路径 | pwd |
ls/ll | 列出当前目录中的所有文件 | ls只显示文件名,ls显示创建时间,总条数等很多内容 |
touch | 新建一个文件 | touch index.html |
rm | 删除一个文件 | rm index.html |
mkdir | 新建一个文件夹 | mkdir js |
rm -r | 删除一个文件夹 | rm -r js |
reset | 重新初始化终端/清屏 | reset |
clear | 清屏 | clear |
history | 查看命令历史 | history |
help | 帮助 | help |
exit | 退出 | exit |
# | 注释 | #rm 1.txt |
git init | 初始化仓库 | git init |
git clone | 拷贝一份远程仓库,也就是下载一个项目 |
add commit等不列举在这里
rm -rf / 数据库从删库到跑路
git分支命令
列出所有本地分支
git branch
列出所有远程分支
git branch -r
新建一个分支,但依然停留在当前分支
git branch [branch-name]
新建一个分支,并切换到该分支
git checkout -b [branch]
合并指定分支到当前分支
$ git merge [branch]
删除分支
$ git branch -d [branch-name]
删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
git原理
工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。
图上包含六个常用的命令
上传项目文件的大概流程是,先add到缓存区,再commit到本地仓库,再push到远程仓库。下载的过程类似,先pull到本地仓库,再reset到缓存区,最后checkout到工作区。
git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)
查看文件状态
查看指定文件状态
git status [filename]
查看所有文件状态
git status
忽略文件
有些时候不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等
在主目录下建立".gitignore"文件,此文件有如下规则:
忽略文件中的空行或以井号(#)开始的行将会被忽略。
可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。
如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
*.txt #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
!lib.txt #但lib.txt除外
/temp #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/ #忽略build/目录下的所有文件
doc/*.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
两种上传文件的方法
1.vscode直接上传
安装git的时候配置了一下,设置他绑定的软件是vscode,所以可以用vscode直接提交而不用命令行。
大概方法就是,先对文件进行修改,然后点击资源管理器。
点击更改上面的加号,将所有文件提交到暂存区
提交暂存文件
输入信息
推送。
2.通过命令行上传
首先要pull一下,更新本地的文件
add . 将当前文件夹下的所有文件提交到暂存区
也可以写git commit -a
这样每次修改文件,都不需要add了
nginx(简单概括)
nginx主要的特性是,负载均衡和动静分离
正向代理是作用在用户端的,一般是翻墙之类的,反向服务器时作用在服务器端的,为服务器分配请求。
负载均衡就是,当接入代理服务器时,代理服务器会为服务器分配资源,比如请求了15次,如果每个服务器的权重都相同,那么可能会给每个服务器分配5次请求。
动静分离就是把动态资源jsp和servlet等和静态资源html,css等分离开。
通过在nginx安装目录输入cmd,输入命令行nginx.exe启动代理服务器
nginx -s reload可以重新加载配置文件。
nginx -s stop 可以停止nginx进程
过程
假设说我想访问localhost:7002的时候,随机跳转到localhost:8080或者localhost:8081,大概需要在nginx.conf里这么配置:
upstream 123{
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=1;
}
自己设置一个类似函数的东西,设置两个端口,让它负载均衡
server {
listen 7002;
server_name localhost;
#这里是监听
location / {
root html;
index index.html index.htm;
proxy_pass http://123;
#这里设置一下跳转到哪里
}
}
还没完全搞明白,博客待更新