luffer---git和svn比较,git工作流程、常用命令、多分支开发、远程仓库、ssh连接远程仓库、协同开发、冲突解决、线上分支合并
git和svn比较
svn :集中式管理,cs架构,客户端需要配合服务端才能正常使用功能

git:分布式管理,单台机器就能进行版本管理

git工作流程

有三个区:
-工作区:代码,文件存放的位置,新增,修改,删除文件,代码
-暂存区:把工作区的更改提交到暂存区
-版本库:把暂存区的数据,提交到版本库
工作流程:
-在工作区修改代码,提交到暂存区,暂存区再提交到版本库,代码才被版本管理,可以回退
-各个区域可以相互操作,但工作区不能直接提交到版本库
git常用命令
将已有的文件夹 - 初始化为git仓库
"""
>: cd 目标文件夹内部
>: git init
"""
在指定目录下 - 初始化git仓库
"""
>: cd 目标目录
>: git init 仓库名
"""
在仓库目录终端下 - 设置全局用户
"""
>: git config --global user.name '用户名'
>: git config --global user.email '用户邮箱'
注:在全局文件 C:\Users\用户文件夹\.gitconfig新建用户信息,在所有仓库下都可以使用
"""
在仓库目录终端下 - 设置局部用户
"""
>: git config user.name '用户名'
-- 用户名
>: git config user.email '用户邮箱'
-- 用户邮箱
注:在当前仓库下的config新建用户信息,只能在当前仓库下使用
注:一个仓库有局部用户,优先使用局部用户,没有配置再找全局用户
"""
查看仓库状态
"""
# 当仓库中有文件增加、删除、修改,都可以在仓库状态中查看
>: git status
-- 查看仓库状态
>: git status -s
-- 查看仓库状态的简约显示
"""
工作区操作
# 通过任何方式完成的文件删与改
# 空文件夹不会被git记录
撤销工作区操作:改、删(了解)
"""
>: git checkout .
-- 撤销所有暂存区的提交
>: git checkout 文件名
-- 撤销某一文件的暂存区提交
"""
工作区内容提交到暂存区
"""
>: git add .
-- 添加项目中所有文件
>: git add 文件名
-- 添加指定文件
"""
撤销暂存区提交:add的逆运算(很少使用)
"""
>: git reset HEAD .
-- 撤销所有暂存区的提交
>: git reset 文件名
-- 撤销某一文件的暂存区提交
>: git reset .
-- 撤销所有暂存区的提交
"""
提交暂存区内容到版本库
>: git commit -m "版本描述信息"
撤销版本库提交:commit的逆运算
"""
回滚暂存区已经提交到版本库的操作:
查看历史版本:
>: git log
>: git reflog
查看时间点之前|之后的日志:
>: git log --after 2018-6-1
>: git log --before 2018-6-1
>: git reflog --after 2018-6-1
>: git reflog --before 2018-6-1
查看指定开发者日志
>: git log --author author_name
>: git reflog --author author_name
回滚到指定版本:
回滚到上一个版本:
>: git reset --hard HEAD^
>: git reset --hard HEAD~
回滚到上三个版本:
>: git reset --hard HEAD^^^
>: git reset --hard HEAD~3
回滚到指定版本号的版本:
>: git reset --hard 版本号 (重点)
>: eg: git reset --hard 35cb292
"""
过滤文件
在仓库目录下,新建一个 .gitignore 文件,文件中写目录或者文件或者模糊匹配,它可以完成对这些文件的忽略。项目的日志文件,生成的编译文件,前端项目的node_models文件夹都不需要被版本管理,写忽略文件可以完成这个事。
过滤文件内容:
文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤
/文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤
eg:
a.txt:项目中所有a.txt文件和文件夹都会被过滤
/a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤
/b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
*x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)
空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)
git 不管理空文件夹,文件夹下有文件,才会被管理
git远程仓库
上面都是在本地操作,做代码管理,咱们需要协同开发,把多人的代码合并到一起,需要有一个远程仓库,搭建都把代码提交到远程仓库,远程仓库帮我们做合并,github,gitee,gitlab 都是远程仓库。
创建仓库一般都是组里的老大做的,我们可以自己弄个仓库测试测试。


创建完远程仓库后,我们的操作
-本地没有代码
# 添加文件到管理
git init
# 添加到暂存区
git add .
# 添加到版本库
git commit -m 'sss'
# 添加远程源
git remote add origin https://gitee.com/liuqingzheng/luffyapi.git
# 上传到远程仓库
git push origin master
-本地有代码
git remote #查看有哪些远程仓库
git remote remove 名字 # 删除远程仓库的关联
# 创建一个远程仓库的关联
git remote add origin https://gitee.com/liuqingzheng/luffyapi.git
# 把本地代码提交到远程仓库 把本地master分支提交到远端的origin上
# 输入gitee的用户名密码
git push origin master
ssh链接远程仓库,协同开发
https的链接方式:输入用户名和密码,输入一次就被保存了
ssh的链接,不需要用户名密码,需要公钥和私钥。
第一步:生成地址参照地址:
https://gitee.com/help/articles/4181#article-header0
第二步:在命令行中执行
ssh-keygen -t rsa -C "306334678@qq.com"
第三步:会在当前路径下生成公钥私钥
/c/Users/oldboy/.ssh/
id_rsa :私钥 不能泄露
id_rsa.pub:公钥 可以给别人,配置到git远程仓库
第四步:公钥配置到gitee账户上
第五步:以后就不需要使用用户名密码,就可以直接操作gitee了,走的是ssh链接,而不是https链接
第六步:删除原来配置的https的origin
git remote remove origin
第七步:加入ssh的origin
git remote add origin git@gitee.com:liuqingzheng/luffyapi.git
注意,在公司里,在设置用户邮箱和名字的时候,要设置自己真正的邮箱(注册gitee,gitlab的邮箱)
协同开发
# 步骤
-第一步:你到公司(gitee,gitlab),注册账号
-第二步:把你的公钥配置在你的gitee,gitlab账号上
-第三步:把你的邮箱发给项目的管理者(你老大)
-第四步:他把你账号添加为开发者---》你就可以读写项目了
-第五步:你要把公司项目拉到本地
-方式一:直接下载zip
-方式二:在命令行中执行
git clone git@gitee.com:liuqingzheng/luffyapi.git
-第六步:改代码,提交 (ssh,https提交)
git add .
git commit -m '注释'
#在提交之前一定要拉一下代码
git pull origin master # 可能会有冲突
git push origin master
# 冲突出现的原因:
-分支合并
-多人在同一分支开发
冲突解决
多人同一分支开发出现冲突

# 冲突出现的样子
print('lqz')
<<<<<<< HEAD
=======
print('sss')
>>>>>>> 732f1921741fa4d6153d1c4b7eb0302a509838d9
"""
<<<<<<< HEAD # 冲突的开始
# 自己的代码
======= # 分割线
# 别人的代码
>>>>>>> b63c408abd05b87fc492d40523240561999dba50 # 冲突的结束(版本)
"""
先把冲突的地方删除,剩下的代码分析,需要留哪些,到底是留我的代码,还是留同事的代码(删同事的,跟同事说一声),如果删自己的,不用说
分支合并出现冲突

git merge dev #冲突了
# 解决冲突
git add .
git commit -m '提交了'
线上分支合并
######### 每次提交代码之前都要先拉一下######
#公司里叫提交 pr
# 操作步骤
在远端新建dev分支
在本地新建dev分支,切换到dev分支
执行git pull origin dev #把远端的dev拉倒本地的dev
修改代码
git add .
git commit -m '注释'
git pull origin dev # 先拉
git push origin dev # 把本地当前在分支(dev)推到远端dev
远端的master和dev代码就不一样了
远端合并代码
提交pr
你领导审核,审核过后,通过,就合并了

浙公网安备 33010602011771号