【前端27_代码管理】Svn & Git
表格速查
命令 | 意义 |
---|---|
查看 | |
git log -p api/model.js |
查询文件历史改动,查看犯罪记录 |
git reflog |
查看 |
git reset --hard 27b5 |
跟 reflog 配合,退回缓存区的代码 |
git diff fileName.js |
和暂存区的文件对比差异 |
git status |
查看缓存区的状态 |
git diff |
查看文件变化,但是增加文件是看不出来的 |
git log --graph --pretty=oneline --abbrev-commit |
一行查看 |
项目中的流程 | 注意,所有的命令都是在项目的根目录下输入的 |
Step1:git add . |
把改动的文件添加到暂存区 |
Step2: git pull origin master |
pull = fetch + merge |
Step3:有冲突解决冲突,解决完冲突后 git add . |
冲突的解决,可以在 vs code 中合并代码 |
Step4:git commit -m '提交日志' |
提交日志,必须在项目的根目录下提交 |
Step5:git push |
保存到本地暂存区 |
Step6:git push origin 本地分支名:远端分支名 |
推送到远端 |
从远端拉分支到本地新分支 | 需求:在远端 master 分支的基础上添加新功能 |
Step1:git branch -d 分支名 |
首先确保本地分支没有这个,先删除分支 |
Step2:git checkout -b guangdong_08_10 origin/master |
从远端拉分支master 到本地,新建 guangdong_08_10 的分支并切换到此分支。 |
新的开发:创建分支的一些操作 | |
Step1:git switch -c 新分支名 |
根据当前分支来创建新的分支 |
首先要切换到当前分支,然后 git pull origin 远程分支名 |
把远端 master 分支合并到 header(当前)分支 |
修改最近的提交信息 | git commit --amend |
Svn & Git
他们两个都是代码管理工具
Svn
服务端
服务端的界面是这个样子的。
可以通过服务端,获得代码仓库的地址,修改代码仓库的管理者。给管理者分权限等等一系列操作。
客户端
- 如果你是项目的新人,第一次需要先 checkout 来下载当前的项目,点击之后会弹出一个窗口,输入仓库的地址,点击确定,下载远程仓库的代码,以后都是 update。
- 提交文件的话,右键
svn commit
,然后输入需求编号,员工的工号,还有日志的信息 - 如果本地代码版本和服务器上的代码版本不一致,是不会让你提交的,会报错。这时候需要更新,而且你写的代码依然存在(只要你们修改的不是同一行,有冲突的可能性)
- 如果很巧,有两个人同时修改了同一行,那么 SVN 会返回几个版本。(其中有你修改的,别人修改的,服务器上的版本,然后按照需求来接着修改代码)
- 提交之前要对比一下,确认好了之后在提交(可以使用 beyondCompare 对比工具)
- 不要删空格和 tab 键,不然会冲突的(因为 tab 和空格在样子上是看不出来的)
- 自己的错误一定要及时改正。
- 变量要拼对了单词。
- 如果谁给你删了代码,查看 log,就可以通过工号来骂他了。
- 回退版本
show log
,之后在想要回退的版本上update to revision
。
使用场景
- 程序员做需求之前要更新代码
- 功能写完,自测没有问题之后,(确保工程能够启动起来),提交代码。
代码环境
- 敏捷环境:开发人员使用,所有的开发人员公用一个环境。(开发周期变短)
- 冒烟环境:测试人员使用的。(一天/半天一同步),基本上就是生产环境,除了数据不太一样
- 生产环境:版本迭代,前期的程序员估计用不到。
Git
简介
林纳斯:Linux 内核的创始人,开源系统,代码管理工具对 Linux 开源,然而管理工具不让用了,所以它又做了个 Git(非常牛逼),诞生背景。
我们可以通过这一张图来搞定 Git 的常用命令,图中从右到左分别是工作区、暂存区、本地仓库、远程仓库
先说一下大体叭:右面的这些(除了
Remote
),都是我们本地的,而Remote
是远端代码仓库,我们最后要从Repository
推送到Remote
中。
分类
- 集中式仓库:集中一起来开发,公司经常用,合作模式
- 分布式仓库:分布到各个电脑上,个人开发可以使用
过程
初始化
在一个空文件夹下,鼠标右键打开Git Bash
,键入命令git init
,创建一个.git
的隐藏文件夹。
配置:输入你的名字和邮箱,之后可以在config
文件中查看到
创建文件并添加到暂存区
在文件夹下新建a.txt
,然后通过命令git add a.txt
添加到暂存区,(可以通过git add .
添加所有修改的文件,就不需要老打文件名字了。)然后通过git status
查看状态。
从暂存区提交到仓库
通过命令 git commit -m '提交日志'
,提交到本地仓库中。(强制输入提交日志,会进入 vim,通过:wq
保存退出。)
查看日志
可以通过git log
查看详细日志,通过git log --oneline
查看简单的日志。
如果以后把这个窗口关闭了,然后还想看所有的log
,可以通过git reflog
查看所有日志。
回退版本
通过git reset --hard 哈希值
,回退版本。
推送到 Github
克隆仓库
点击你的github
仓库上的Clone
。
在本地文件夹里键入git clone 你的仓库地址
添加远端仓库地址
通过:git remote add origin 仓库地址
推送到远端
通过git push
git 廖雪峰教程笔记 *
不得不说廖老师的笔记简单易懂,我很快乐。
廖雪峰 git 教程点我
基本操作
git 是个分布式版本控制系统
首先,初始化一个Git
仓库,在终端里使用git init
命令。 初始化仓库 git init
会在当前目录生成个 .git
的隐藏文件夹
添加文件到 Git 仓库,分两步:
使用命令git add <file>
,注意,可反复多次使用,添加多个文件;
使用命令git commit -m <message>
,完成提交。
git status
查看缓存区的状态git diff
查看改动的文件的细节
版本回退
首先 git log --pretty=oneline
查看一下log
版本日志
我想回退到上个版本(添加 distributed),使用git reset --hard HEAD^
此时如果打印 git log
是看不到未来版本的了,sourcetree
中也看不到未来版本,也就是append GPL
,那如何回到未来呢?
我们可以通过git reflog
查看操作,获得到某个操作的commit id
然后git reset --hard 27b5
回撤到想要回到的状态
动图如下:
工作区和暂存区的概念,git 每次 add 操作的时候,都是工作区的修改,放到了暂存区,然后 commit 了,才是提交到了版本库中。
重要的概念:git 管理的是文件的修改,而不是文件。
撤销工作区的修改
撤销有两种情况
一种是readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
如果想撤销暂存区的状态,可以这样:git reset HEAD <file>
,工作区的文件还是没变
回撤总结
场景 1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
场景 2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>
,就回到了场景 1,第二步按场景 1 操作。
场景 3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
远端
建立远端仓库后,第一次提交git remote add origin git@github.com:Amethyst-Ruby/learngit.git
然后git push -u origin master
,我们第一次推送 master 分支时,加上了-u 参数,Git 不但会把本地的 master 分支内容推送的远程新的 master 分支,还会把本地的 master 分支和远程的 master 分支关联起来,在以后的推送或者拉取时就可以简化命令。
分支管理
因为创建、合并和删除分支非常快,所以 Git 鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在 master 分支上工作效果是一样的,但过程更安全。
Git 鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
或者git switch <name>
创建+切换分支:git checkout -b <name>
或者git switch -c <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
图文查看:git log --graph --pretty=oneline --abbrev-commit
,其中的 (--abbrev-commit
仅显示 SHA-1 的前几个字符,而非所有的 40 个字符)
分支策略(摘抄)
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master 分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在 dev 分支上,也就是说,dev 分支是不稳定的,到某个时候,比如 1.0 版本发布时,再把 dev 分支合并到 master 上,在 master 分支发布 1.0 版本;
你和你的小伙伴们每个人都在 dev 分支上干活,每个人都有自己的分支,时不时地往 dev 分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
.gitignore
我之前遇到个情况,就是想要屏蔽构建后的一个文件夹,但是总是屏蔽不了
原因是:我之前已经添加了这个文件到 git
中了
如果想要屏蔽构建文件夹的话,需要现在本地,删除这个文件夹,然后再
1 | git add . |
之后,在 .gitignore
中添加路径即可。
git 使用遇到的问题
error: remote unpack failed: index-pack abnormal exit
这是因为本地 git 设置大小权限了,修改一下本地 git 的配置