本次笔记来自狂神说以及官网
版本控制是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
简单说就是用于管理多人协同开发项目的技术
Git
SVN ( Subversion )
CVS ( Concurrent Versions System )
VSS ( Micorosoft Visual SourceSafe )
TFS ( Team Foundation Server )
Visual Studio Online
现在影响力最大且使用最广泛的是Git与SVN
记录文件每次的更新,可以对每个版本做一个快照,
或是记录补丁文件,适合个人用,如RCS。
所有的版本数据都保存在服务器上,
协同开发者从服务器上同步更新或上传自己的修改
注意点:
所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器 上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品: SVN、CVS、VSS。
所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。
每个人都拥有全部的代码!安全隐患!
不会因为服务器损坏或者网络问题,造成不能工作的情况!
SVN
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
Git
Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A ,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。Git可以直接看到更新了哪些代码和文件!
Git是由Linux之父写的 – 李纳斯·托沃兹
直接反安装即可,环境变量里的path里的git都清掉 然后卸载git
git官网 https://git-scm.com/,下载git对应操作系统的版本。
注意:
安装成功后在开始菜单中会有Git项,菜单下有几个程序:
任意文件夹下右键也可以看到对应的程序!
Git Bash : Unix与Linux风格的命令行,使用最多,推荐最多
Git CMD : Windows风格的命令行
Git GUI :图形界面的Git,不建议初学者使用,尽量先熟悉常用命令
》git config -l
查看当下关于git的所有配置
-l:list清单
其中里面会有对应的name和email
注意: 换新电脑必须要配用户信息
》git config --system --list
查看系统配置
这里边就没有用户信息
》git config --global --list
查看当前用户(global)配置(用户自己配的)
用户名和邮箱这个是必须配置的–向git表明你是谁
cd :改变目录
cd … :回退到上一个目录
pwd :显示当前所在目录路径
ls(ll) :列出当前目录所有文件,ll列出的内容更详细
touch :新建一个文件 ,touch index.js那么就会出现index.js文件
rm :删除一个文件,rm index.js
mkdir :新建一个文件夹(目录)
rm -r:删除一个文件夹,rm -r src 删除src目录
rm -rf》切勿在Linux中使用,删除电脑中全部文件!
mv :移动文件,mv xxx.js src ,xxx.js 是我们要移动的文件,
src是目标文件夹,这样写,保证文件和目标文件夹在同一目录下
reset :重新初始化终端/清屏
clear :清屏
history :查看历史命令
help :帮助
exit :退出
#表示注释
xxxx\Git\etc 》gitconfig文件
等价于 git config --system --list
system 系统级
C:\Users\xxx 》gitconfig文件
等价于 git config --global --list
只适用于当前登录用户的配置
注意: 第一次下git没有这个文件夹
global 全局
里面的内容一般是:
[user]
name = xxxxxx
email = [email protected]
这里可以直接编辑配置文件,通过命令设置后会响应到这里
如果你之前就有了,想重配,直接删除重新写就行。
git config --global --list 查看里面是空的就对了
基于上面的 如何写上去,就根据下面的指令:
当你安装Git后首先要做的事情是设置你的用户名称和e-mi地址。这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中:
git config --global user.name “xxxx” #名称
git config --global user.email [email protected] #邮箱
这个步骤必须要做,不然以后提交不上去 相对于身份证
只需要做一次这个设置
git config --global --list 查看到底有了没。
Git本地有三个工作区域:工作目录( Working Directory)、暂存区(Stage/Index)、 资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
解释:
注意:
工作目录下有个隐藏的.git文件夹
.git》存放Git管理信息的目录,初始化仓库的时候自动创建
.git文件夹里有个HEAD文件
》里面有一些指向的目录 和暂存区 和主分支和子分支
步骤:
本地文件先通过git add .命令添加到 暂存区 (只是暂时存在,并没有保存)
然后需要 git commit 命令提交到本地的git 仓库
git push 命令提交到远程仓库
从远程把代码拉到本地 git pull/
回滚回来 git reset / git checkout
git的工作流程一般是这样的:
1.在工作目录中添加、修改文件;
2.将需要进行版本管理的文件
放入暂存区域; git add .
.代表全部文件add进去
3.将暂存区域的文件提交到git仓库。
因此,git管理的文件有三种状态:
已修改( modified) ,已暂存( staged ) ,已提交(committed)
创建工作目录》gitcode
工作目录( WorkSpace)一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录 ,建议不要有中文。
创建本地仓库的方法有两种:
一种是创建全新的仓库,另一种是克隆远程仓库.
1、创建全新的仓库,需要用GIT管理的项目的根目录执行:
》在当前目录新建一个Git代码库 --初始化一个git项目
$ git init
隐藏的项目要打开不然看不到.git文件
2、执行后可以看到,仅仅在项目目录多出了一个.git目录 ,
关于版本等的所有信息都在这个目录里面。
另一种方式是克隆远程目录,
由于是将远程服务器上的仓库完全镜像一份至本地!
》克隆一个项目和它的整个代码历史(版本信息)
$ git clone [ur1]》https /gitee. com/xxx/xxxx
不要复制换行不然会直接执行
通过查看文件状态,来知道当前文件在什么状态,
以防出现提交了不想提交的文件,或者未提交成功。
有4种状态:
Untracked:未跟踪,未加入到git库,不参与版本控制
Unmodify:文件已入库,未修改
modified:文件已修改,并没有执行其他操作
staged:暂存状态 ,执行git commit同步到库中。
通过如下命令可以查看到文件的状态:
》查看指定文件状态
git status [filename]
》查看所有文件状态
git status
添加所有文件到暂存区
》git add .
提交暂存区中的内容到本地仓库
》git commit -m “信息内容”
-m 提交信息
1.git init
注意:
2.git add . 添加到暂存区
3.git status 查看有没有添加进去
changes to be commited
4.git commit -m “xxx.xxx”
如果添加进去了,就执行这一步 提交到本地
5.git push 远程
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等
在主目录下建立"gitignore"文件,此文件有如”下规则:
1.忽略文件中的空行或以井号( # )开始的行将会被忽略。
2.可以使用Linux通配符。例如:星号( * )代表任意多个字符,问号( ? )代表一个字符,方括号( [abc] )代表可选字符范围,大括号( {string1 string2… )代表可选的字符串等。
3.如果名称的最前面有一个感叹号(!) , 表示例外规则,将不被忽略。
4.如果名称的最前面是一个路径分隔符(/) , 表示要忽略的文件在此目录下,而子目录中的文件不忽略。
5.如果名称的最后面是一个路径分隔符 (/) , 表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
idea中有一个这个文件.gitignore,会自动生成 创建工程时
.gitignore 通过git来决定哪些文件我们可以忽略不把他们添加到暂存区
*.class
*.log
*.lock
# Package Files #
*.jar
*.war
*.ear
target/
# idea
.idea/
*.iml/
*velocity.log*
### STS ###
.apt_generated
.factorypath
.springBeans
### IntelliJ IDEA ###
*.iml
*.ipr
*.iws
.idea
.classpath
.project
.settings/
bin/
*.log
tem/
#rebel
*rebel.xml*
.idea/ idea目录下的都不会上传
github是有墙的,比较慢,在国内的话,
我们一般使用gitee,公司中有时候会搭建自己的gitlab服务器
注册登录码云,完善个人信息
注意:
其中有个 url后缀,写你想要的,到时候这就是你的git-url。
设置本机绑定SSH公钥,实现免密码登录!
注意:
免密码登录,这一步挺重要的,
码云是远程仓库 我们平时工作是在本地仓库,
上传本次写密码,会很麻烦
1.先进入 C:\Users\xxxx.ssh 目录
注意:
可能刚开始找不到.ssh文件,就直接执行命令生成公钥,会自动创建
2.然后执行命令生成公钥
》ssh-keygen -t rsa
-t加密 rsa加密算法 一路回车
说明:
.ssh文件有两个文件
id_rsa.pub 是公钥 id_rsa是私钥
将公钥信息public key添加到码云账户中即可!
最开始注册登录的时候,
你的SSH公钥是空的,
把id_rsa.pub里的公钥粘贴到SSH公钥里去
使用码云创建一个自己的仓库!
1.在网站上,点击+号 新建一个仓库(gitstudy)
可以选择开源或者私有
如果公开 开源许可证选 GPL-3.0
许可证: 开源是否可以随意转载,开源但是不能商业使用,不能转载,有限制!
2.创建成功后,可能需要你初始化readme文件,那就初始化。
3.把HTTPS 里的地址复制下来
4.这时候就可以执行命令(git命令界面或者idea中)
git clone url
把远程仓库克隆到本地
1.git credential manager for windows解决方法
博客:
https://blog.csdn.net/qq_26715417/article/details/104822039
2.git 提交身份验证错误
Incorrect username or password ( access token )
博客:
https://blog.csdn.net/qq_41772754/article/details/88079282
3.Could not resolve host: gitee.com
博客:
https://blog.csdn.net/weixin_45793819/article/details/106646875
》将我们远程的git文件目录拷贝到项目中即可!
1.新建项目,目录选择之前创建的gitcode下,名字叫git0125
2.方式一:(万能方式)
然后把上面克隆的gitstudy里的内容拷贝到现在这个项目下
隐藏目录》 .git也要
方式二:(很少用)
在远程同名目录下创建项目
3.这时候就出现这个
红色是未被选中 ,已经加入控制暂未提交
如果是绿色的,已经加入控制暂未提交
蓝色,加入,已提交,有改动
白色,加入,已提交,无改动
灰色:版本控制已忽略文件
idea 集成的git基本操作
第一个是拉取Update Project
第二个是提交 Commit
1.Version Control: 版本控制
打开它 就能看到仓库的全部信息
2.命令行terminal
git add .》全部add进去
然后界面就变成绿色了 》证明被添加到暂存区
你也可以直接项目右击add
然后就是Commit Message 》提交的信息(备注)
必须要写,里面一般是我们修改了哪些代码
我这边写了第一次提交
5.git push 上传到远程
如果要输用户名和密码,注意用户名 是邮箱 !!!
6.然后再去自己的gitee网站查看 就有了
注意:
上面都是单个人的操作!
一般情况下,主分支和子分支互不干扰,没有影响,
但有时候就会合并,这时候我们就需要进行处理问题,
不然会有不好的后果。
列出所有本地分支
》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]
相互协调