git介绍
为什么需要版本控制器?
多个文件,保留所有的版本,需要为每个版本保存一个文件
协同操作,多个人系统操作时,需要将文件打包发来发去
容易丢失,被删除意味永远失去
版本控制器的分类:
VSS:上古时代的一个工具,微软开发,现在基本没啥人使用,忽略
SVN:十年前,非常火的软件
特点:集中式版本控制器
缺点:一旦服务器毁灭,代码就消失
GIT:
特点:分布式版本控制器
优点:相对于SVN,不用担心服务器挂掉
SVN和GIT相同点:
服务器(存储代码)
客户端(用来管理代码)
git基本使用
安装:https://gitforwindows.org/
打开Git Bash
以testgit为例:
a.初始化管理代码
cd到指定的项目目录下
git init :对当前目录进行初始化 会多出来一个隐藏文件夹 .git
git add <文件>/git add . :将当前目录下的文件添加到暂存区
git status : 查看当前目录下所有文件的状态
git commit -m '辅助信息' :提交代码到版本库
例如:git commit -m '提交第一版代码'
每次操作完成以后 验证:
$ git status
On branch master
nothing to commit, working tree clean
如果出现Please tell me who you are.
在 init 之后输入下列命令:
git config --global user.name "henry"
git config --global user.email "henry@163.com"
b.开发一个新的功能,发短信的功能
git add <文件>/git add .
git status
git commit -m "注释"
git回滚代码
#短信功能太烧钱,想退回到上一个版本
git reset --soft commit_id (回滚到版本库暂存区)
git reset --mix commit_id (回滚到工作区修改过的内容)
git reset --hard commit_id (回滚到工作区原内容)
回滚上一个版本
#拿到版本的id
git reflog :查看日志文件,存在commit_id
'''
3b028e4 (HEAD -> master) HEAD@{3}: commit: 短信功能
c8484c4 HEAD@{4}: commit (initial): 提交第一版本代码
'''
#将代码从本地版本库拉回工作区
git reset --hard '上个版本的id'
#git reset --hard c8484c4
返回最新的版本
#拿到最新版本的id
git reflog
'''
3b028e4 HEAD@{2}: commit: 短信功能
c8484c4 (HEAD -> master) HEAD@{3}: commit (initial): 提交第一版本代码
'''
#回滚到最新版本
git reset --hard '最新版本id'
#git reset --hard 3b028e4
git stash和分支
#现在开发了一个功能(直播功能),开发到一半,线上出现bug
方法一:stash
出现bug和修改的文件不是一个文件
git stash : 将之前刚刚修改的那一部分代码保存到某个地方
修改bug完毕
git add .
git commit -m '注释'
git stash pop :将之前保存的修改部分,再次拉回
git add .
git commit -m '注释'
出现bug文件和修改的文件是同一个文件(比如都在readme)
git stash : 将之前刚刚修改的那一部分代码保存到某个地方
修改bug完毕
git add .
git commit -m '注释'
git stash pop :将之前保存的修改部分,再次拉回
git stash pop :将之前保存的修改部分,再次拉回
vim readme
出现冲突:
<<<<<<< Updated upstream
myage = 123
=======
age = 18
height = 180
>>>>>>> Stashed changes
手动解决:
age = 18
height = 180
git add .
git commit -m '注释'
方法二:
推荐使用 分支
master:上线代码的时候,使用的是主分支代码,需要保证没有任何bug
dev :开发的时候,使用的分支
git branch :列出当前所有的分支
git branch <分支名>(dev/bug) :就会创建出一个新的分支
git checkout 分支名(dev) :将master上的代码拷贝一份给dev分支开发
注意:
以后开发代码的时候,不能在master上开发,需要自己开一个分支开发
在dev上开始开发代码
vim gongneng1.txt
git add .
git commit -m "注释"
此时出现一个bug,需要修复bug:
#切换到master分支
git checkout master
git branch bug : 产生一个新的bug分支
git checkout bug
修复bug:
vim msg.txt
git add .
git commit -m '注释'
合并bug代码:
git checkout master
git merge bug:
没有冲突: 过
有冲突:
手动解决冲突
解决完毕后:
git add .
git commit -m '注释'
bug修复完毕后,又开始到dev分支上进行开发
git checkout dev
功能开发完毕,不要贸然的合并代码,问一下领导,接下来怎么做?
合并dev上的代码到master上:(权限属于领导)
git checkout master
git merge dev
出现如下界面,说明没有任何冲突出现:
Merge branch 'dev'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
如果有冲突出现,手动解决冲突
起分支名:
git branch 0603fixbug
解决完bug分支,bug分支还有没有必要存在?
不删,以后查看的时候方便查看问题
删除,bug 分支的使命已经完成,应该删掉(git branch -d bug)
服务端(储存代码的地方)
公用(自己用)
国外:https://github.com/
国内:https://gitee.com/
私用:
gitlab(公司自己用)
码云为例:
创建一个公有仓库
方法一:用https进行提交
https://gitee.com/lizeqian828/python.git
每次都要往仓库地址进行提交,所以我们需要给其命名一个别名
git remote add 远程仓库名 远程仓库地址
git remote add origin https://gitee.com/lizeqian828/python.git
删除远程仓库别名:git remote remove origin
方法二:用ssh进行提交
git@gitee.com:lizeqian828/python.git
git remote add origin git@gitee.com:lizeqian828/python.git
使用ssh进行提交需要在网站上配置公钥
寻找公钥私钥:
ssh-keygen -t rsa -C "250735877@qq.com" 一直回车,可以找到.ssh的位置,
内有id_rsa和id_rsa.pub两个文件, id_rsa是私钥,id_rsa.pub是公钥
将公钥配置到网站上,设置-安全设置
在master分支上提交:
git push origin master
在dev分支上开发提交:
git checkout dev
开发新功能:
开发完毕
git add .
git commit -m "注释"
git push origin dev
将代码拷贝到自己的电脑上,可以在家进行开发
ssh需要进行公钥私钥验证
git clone 代码的地址 #进入指定文件夹,将库中的代码克隆到自己电脑的指定文件夹下
git clone git@gitee.com:lizeqian828/python.git
git clone https://gitee.com/lizeqian828/python.git
cd 仓库名
进入master主分支
git branch dev origin/dev #将线上的dev也导下来
git checkout dev
开发新功能
开发完毕
git add .
git commit -m '注释'
git push origin dev
到公司:
因为在家里对dev进行了修改,所以我们需要在公司的电脑上进行更新
git pull origin dev : 将线上最新的代码拉到本地, 保证本地的代码是最新的
#注意
如果在公司代码操作完毕,没有进行push,然后在家进行了更新提交
再次回到公司我们需要先更新git pull ,确保本地的代码版本是最新的,然后在提交未提交的代码
所有的提交代码,也就是push操作的时候, 如果你没有git pull, 保证本地的代码版本是最新的话, 会报错:
! [rejected] dev -> dev (fetch first)
error: failed to push some refs to 'git@gitee.com:lupython/s5git.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
因此, 我们需要每次push之前, pull一下, 确保代码是最新的
协同开发:
多人开发同一个项目
在你入职的时候, 领导会给你开一个gitlab的账号, 然后将你拉入你要开发的那个项目中
码云中操作:进入仓库 -> 管理 ->仓库成员管理 ->添加仓库成员
接下来, 在你的电脑上, 配置公钥私钥免密登录,
常见的问题:
自己的代码自己管, 千万不要手贱, 动别人的代码 (********************)
遇到配置文件, config.py, 将配置选项汇总给领导, 让领导改 config.
忽略提交某一类文件:
需要在当前目录下编辑一个文件 .gitignore
比如需要忽略.pyc文件
vim .gitignore
输入 忽略的文件信息: *.pyc
网上会提供一个文件,里面包含了所有可忽略的文件