学习极客时间的笔记
一些常用的命令及解决办法
vsc出现之前的情况
用目录拷贝区别不同版本
公共文件容易被覆盖
成员沟通成本很高,代码继承效率低下
集中式vcs
有几种的版本管理服务器
具备文件版本管理和分值管理能力
继承效率有明显地提高
客户端必须时刻和服务器相连
分布式vcs
服务器和客户端都有完整的版本库
脱离服务端,客户端张扬可以管理版本
查看历史和版本比较等多数操作,都不需要访问服务器,比集中式vsc更能提高版本效率
git特点
最优的存储能力
非凡的性能
开源的
很容易做备份
支持离线操作
很容易定制工作流程
配置user信息
git config --global user.name jim
git config --global user.email [email protected]
config
的三个作用域
git config --local # 只对某个仓库有效
git config --global # 对当前用户所有仓库有效
git config --system # system 对系统所有登陆的用户有效
显示config
的配置, 加 --list
git config --list --local
git config --list --global
git config --list --system
两种场景:
cd 项目代码所在的文件夹
git init
cd 某个文件夹
git init your_project # 会在当前路径下创建和项目名称同名的文件夹
cd your_project
git add files
git commit
git add -u # 将当前修改的文件全部放入暂存区
正常文件重命名方式
mv demo demo_rename
git rm demo
git commit
简便方法
git mv readme readme.md
git log
–oneline
–n4 # 最近四次
–all # 所有分支的版本信息
–graph # 图形化界面
分支
git branch -v
git checkout -b temp 415c5c80…
HEAD: 存储着正在工作的分支的refs
config: config信息
refs/heads: 分支
refs/heads/master: 文件存储的是分支master指针
refs/tags: 设置分支标记,比如该分支为某个重要版本。里面的文件存储的是tag的指针
objects/: 文件内容的指针信息
objects/pack: 如果objects/下文件太多,就打包到pack中
数据类型: tree, blob
git cat-file -t 59a4b3 # 查看该指针对象类型
git cat-file -p 59a4b3 # 查看对象内容
commit 存储commit信息和tree
tree 存储的是blob和tree
blob就是存储的文件
在将文件加入暂存区的时,就会在/objects/创建文件,创建blob
可以checkout某一个commit版本,修改之后需要新建一个分支来保存修改,不然会丢失修改
git checkout 412bx6s82b
head 是指向最新一次的commit
git diff 123123nb dasd8 # 比较两次commit
git diff HEAD HEAD^1 # 和上一次比较
git diff HEAD HEAD11 # 和上上次比较
git dfii HEAD HEAD~2 # 和上上次比较
git branch -d 123bx82x # 删除分支
git commit --amend
git rebase -i 上一commit版本号
reword
git rebase -i 上一commit版本号
squash
git diff --cached
git diff
git diff – demo # 仅对demo文件进行比较
git reset HEAD
git checkout – index.html
git reset HEAD – demo # 撤销demo文件更改
回退到指定版本
git reset --hard 123sad12d
查看 temp 和 master 两个分支的中index.html的差异
git diff temp master – index.html
也可以比较commit之间的差异
git diff 213as 123sd – index.html
git rm demo
git stash
将之前的临时工作空间恢复,并且之前保存的临时空间还存在
git statsh apply
将之前的临时工作空间恢复,并将之前的临时空间丢弃
git statsh pop
git statsh list
.gitignore
哑协议与智能协议
直观区别: 哑协议传输进度不可见,智能协议传输可见、
传输速度: 智能协议比哑协议传输速度快。
哑协议
git clone --bare F:\tmp\git_learning.git ya.git
智能协议
git clone file://F:\tmp\git_learning.git zhineng
本地push到远端
git remote add zhineng file:\F:\tmp\git_learning\git
git push zhineng
查看所有的远程连接仓库
git remote -v
将所有分支都上传上去
git push --all
git push origin master
添加远程仓库
git remote add master git@…
将网络仓库拉下来,但是并不会merge
git fetch origin master
查看本地和远端分支
git branch -av
将当前分支与master分支合并
git merge origin/master
根据远程的分支创建到本地的分支
git checkout -b add_git_commands origin/add_git_commands
A用户修改了a文件, push到远程端,B用户修改了b文件, 然后再push到远端会出问题.
B用户可以先fetch远端的分支到本地,再merge,最后push到远程端
直接通过fetch
和merge
可以直接合并到一起再push
上去是没问题的
首先fetch
远程端,然后沟通修改同一区域,再commit
即可,最后即可将项目push
到远程端。
A修改了文件名,push
到远程端,B修改了文件内容,push
到远程端non-fast-forwards
错误。
解决: B直接pull
远程端到本地,git会感知,直接merge
到一起,然后再push
即可
A修改了文件名push
,B修改了文件名push
不上去。
解决: Bfetch
远程端到本地,然后讨论到底要修改哪个名字,rm
不需要的名字,add
需变更的名字。最后push
tornado in:readme
deploy filename: gitlab
starts: >5000
git garden
blog easily start in:readme stars:>5000
在提交代码时,可以检查代码的规范
可以对组织成员进行权限控制。
主干开发
适用于:组件开发的团队,成员能力强,人员少,沟通顺畅。用户升级组件成本低的环境
Git Flow
适用于: 不具备主干开发能力。有预定的发布周期。需要执行严格的发布流程。
GitHub Flow
适用于:不具备主干开发能力。随时集成随时发布:分支集成时经过代码评审和自动化测试,就可以立即发布的应用。
GitLab Flow(带生产分支)
适用于: 不具备主干开发能力。无法控制准确的发布时间,但有要求不停地集成。
GitLab Flow(带环境分支)
适用于:不具备主干开发能力。需要逐个通过各个测试环境的验证才能发布。
GitLab Flow(带发布分支)
适用于:不具备主干开发能力。需要对外发布和维护不同版本。
三种merge方式.
Allow merge commits :
master出现一个两个分支merge之后的新的commit。从分支消失。
Allow squash merging:
master出现一个两个分支merge之后的新的commit。
Allow rebase merging:
将从分支的每一个commit都放在master分支上,出现多个master commit。
github设置
在github上, project/settings中可以去配置该项目允许的merge方式。
在pull request中可以将分支合并
可以创建看板,一些计划可以放在上面进行管理。
在projects/settings/Branches中可以设置分支合并的规则。
设置项: Require pull request reviews before merging 代表每次require pull 都需要人去审核代码,同意之后才可以pull上去。可以设置审核人数。
持续集成
github apps
codecov
travis ci
将项目打包到release中
wiki
gitlab 集成了CI/CD
github 通过第三方app 添加CI/CD
配置 .yml文件
将代码merge到gitlab上时,可以自动的对代码进行测试,然后再自动的部署到服务器中。
fatal: refusing to merge unrelated histories
在merge两个分支的时候,出现该错误。主要是因为两个分支无相关的历史
解决办法:
–allow-unrelated-histories
no-fast-forward