一、Git源代码管理
思考一个小问题:如果多个协同开发同一个项目?
1.Git的介绍
Git是目前世界上最先进的分布式版本控制系统,没有之一。(目前也有公司在用SVN)
2.Git的作用
源代码的管理,为了方便多人协同开发同一个项目,方便版本记录和代码备份
3.Git管理源代码的特点
- Git是分布式管理,服务器和客户端都有版本控制能力,都能进行代码的提交、合并

- Git会在根目录下创建一个 .git 的隐藏文件夹,作为本地的代码仓库

4.Git操作流程图解

说明:首先从Git服务器(远程仓库)克隆数据到本地仓库,然后再到我们的客户端,紧接着通过客户端编写代码之后提交到缓存区再到本地仓库,最后再提交到Git服务器(远程仓库)
5.工作区、暂存区和仓库区

- 1.工作区
- 对于添加、修改、删除文件的操作,都发生在工作区
- 2.暂存区
- 暂存区是指将工作区中完成的小阶段的操作的存储,是版本库的一部分
- 3.仓库区
- 仓库区表示个人开发的一个小阶段的完成
- **说明:**仓库区记录的版本是可以查看并且回退的,但是在暂存区的版本一旦提交就再也没有了
二、单人本地仓库操作流程
1.Git担任本地仓库操作—安装配置
- 本地仓库是个 .git隐藏文件
(1)安装git
sudo apt-get install git
(2)查看git安装结果
git
(3)创建项目
在桌面创建一个work文件夹,表示是工作中的一个项目文件
cd /Desktop/work/
仓库初始化
git init
(4)配置个人信息
git config user.name ‘wtt’
git config user.email ‘190018484@qq.com’
说明:如果默认不配置的话,会使用全局配置里面的用户名和邮箱
全局git配置文件路径: ~/.gitconfig
2.单人本地操作流程
-
-
新建.py文件
在项目文件work中创建一个login.py文件,用于版本控制演示
-
-
2. 查看文件状态
git status
之后出现的红色文件表示新建文件或者新修改的文件,都在工作区
绿色文件表示在暂存区
-
- 将工作区文件添加到暂存区
- 添加项目中的所有文件到暂存区
- git add .
- 添加项目中的指定文件到暂存区
- git add login.py
- 添加项目中的所有文件到暂存区
- 将工作区文件添加到暂存区
-
- 将暂存区的文件提交到本地仓库区
- 添加暂存区的文件到仓库区
- git commit -m “立项”
- 这里面的"立项"指的是版本的描述信息
- 添加暂存区的文件到仓库区
- 将暂存区的文件提交到本地仓库区
-
- 接下来可以在login.py文件中编辑代码
- 代码编辑完成后即可进行add和commit操作
- 提示:添加和提交的合并命令
- git commit -am “版本描述”
- 提交两次代码,会有两个版本记录
- 提示:添加和提交的合并命令
- 代码编辑完成后即可进行add和commit操作
- 接下来可以在login.py文件中编辑代码
-
- 查看历史记录
- 查看历史版本
- git log
- 或者 git reflog
- git reflog 可以查看所有分支的所有操作记录(包括commit和reset的操作),包括已经被删除的commit纪律,git log则不能查看已经删除了的commit记录
- 查看历史版本
- 查看历史记录
-
- 回退版本
- 回退版本有两种方案
- 方案一:
- get reset --hard HEAD^ 代表回退到当前最新版本的前一个版本 ^^表示回退到上两个版本,以此类推
- get reset --hard HEAD~9 代表回退到当前最新版本的前9个版本,以此类推
- 方案二:(建议使用)
- git reset --hard 版本号
- 版本号可以通过 git reflog 查看 最前面的6位字符串就是版本号
- 方案一:
- 回退版本有两种方案
- 回退版本
-
- 撤销修改
- 只能撤销工作区、暂存区的代码、不能撤销仓库区的代码
- 撤销仓库去的代码相当于回退版本的操作
- 1.撤销工作区代码
- 在login.py文件中新增代码name=“csdn”,然后不提交到暂存区,只保留在工作区
- git checkout login.py # 通过这个命令可以撤销修改
- 在login.py文件中新增代码name=“csdn”,然后不提交到暂存区,只保留在工作区
- 2.撤销暂存区的代码(需要两步)
- 新增代码 num10 = 456 ,并且add到暂存区
- 首先1.将暂存区代码撤销到工作区
- git reset HEAD login.py # 先将暂存区撤销到工作区
- 然后2.将工作区的代码撤销修改
- git checkout login.py # 在工作区中进行撤销修改
- 首先1.将暂存区代码撤销到工作区
- 新增代码 num10 = 456 ,并且add到暂存区
- 1.撤销工作区代码
- 撤销修改
-
- 对比版本
- 1.对比版本库与工作区
- 在login.py文件中新增代码address = 192.168.1.1,不add到暂存区,保留在工作区
- git diff HEAD – login.py // HEAD代表的是版本库 loing.py是工作区的代码文件
- 2.对比版本库
- 在login.py文件中新增代码addr = “fux” ,并add到暂存区
- git diff HEAD HEAD^ – login.py // 比较当前版本和前一个版本中login.py代码的不同
- 1.对比版本库与工作区
- 对比版本
-
-
删除文件
-
删除文件分为确定删除和误删
-
- 确认删除处理
- (1)删除文件 rm 文件名
- (2)git确定删除文件 git rm 文件名
- (3)删除后记录删除操作版本 git commit -m “删除文件1”
-
- 误删处理:撤销修改即可
- (1)删除文件 rm 文件名
- (2)git撤销修改 git checkout – 文件名
-
-
-
三、Git远程仓库Github
1.创建远程仓库(以下演示操作是在Github网站上创建远程仓库)
(1)登录注册Github
(2)创建远程仓库的入口

(3)编辑仓库的信息

(4)仓库创建完成

(5)查看仓库地址
远程仓库地址:https://github.com/Wang-TaoTao/WangTao…git

注:远程仓库地址分为https和ssh。我这里选的是https。直接复制下来
2.配置SSH
(1)首先修改本地计算机的git配置
配置Github注册邮箱和用户名
vi .gitconfig
住:这里面输入自己注册的用户名和邮箱
[user]
email = 190018484@qq.com
name = Wang-TaoTao
(2)生成SSH公钥
ssh-keygen -t rsa -C "190018484@qq.com"

(3)接下来回到Github远程仓库
1.配置SSH公钥入口


2 . 将刚才复制的公钥粘贴到上面这个key里面。点击Add SSH key。

3.配置SSH公钥完成
3.开始克隆项目
- 准备经理文件 Desktop/manager/
- 准备小王文件 Desktop/xiaowang/
经理需要做的工作
-
立项:克隆远程仓库+配置身份信息+创建项目+推送项目到远程仓库
-
1.克隆远程仓库到本地
# 使用HTTPS cd ~/Desktop/managger/ git clone https://github.com/Wang-TaoTao/WangTao..git # 使用SSH cd ~/Desktop/manager/ git clone git@github.com:Wang-TaoTao/WangTao..git 说明:这两种方式都可以,git clone后面的就是刚才在Github网页复制的远程仓库地址 -
2.克隆成功后配置经理身份信息(先新建一个项目文件)
cd ~/Desktop/manager/xiangmu/ git config user.name "经理" git config user.email "manager@163.com" -
3.创建项目并推送到远程仓库
# 创建一个文件 cd ~/Desktop/manager/xiangmu/ touch login.py # 将工作去添加到暂存区 git add login.py # 暂存区提交到本地仓库区 git commit -m "第一个项目文件" # 现在可以推送到远程仓库了 git push

-
注:现在在Github上已经可以查看到这个项目和文件了
-
在 push 的时候需要设置账号与密码,该密码则是 github 的账号与密码
-
如果在每次 push 都需要设置账号与密码,那么可以设置记住密码
设置记住密码(默认15分钟): git config --global credential.helper cache 如果想自己设置时间,可以这样做(1小时后失效): git config credential.helper 'cache --timeout=3600' 长期存储密码: git config --global credential.helper store
小王需要做的工作
-
获取项目:克隆项目到本地、配置身份信息
-
1.克隆项目到本地
cd ~/Desktop/xiaowang/ git clone git@github.com:Wang-TaoTao/WangTao..git # 我这里使用的是https -
2.配置小王的身份信息
cd ~/Desktop/xiaowang/xiangmu/ git config user.name '小王' git config user.email 'xiaowang@163.com' -
注:现在小王的身份信息配置之后就可以跟经理协同开发同一个项目了
4.模拟多人协同开发
1.模拟小王先编辑xiangmu文件下的login.py文件代码
- 进入小王的本地仓库:cd ~/Desktop/xiaowang/xiangmu/
- 编辑代码:vi login.py 写入 name=xiaowang
- 本地仓库记录版本:git commit -am “name小王”
- 推送到远程仓库:git push
2.模拟经理后编辑login.py文件代码
- 进入经理本地仓库:cd ~/Desktop/manager/xiangmu/
- 同步服务器代码:git pull
- 编辑代码:age=22
- 本地仓库记录版本:git commit -am “age22经理”
- 推送到远程仓库:git push
3.模拟小王同步服务器代码
- 本次可以把经理写的age变量同步到小王的本地仓库
- 小王执行 git pull
- 然后查看本地login.py文件
4.按照以上1、2、3步骤循环操作,计科实现基本的协同开发
**5.**总结:
- 要使用git命令操作仓库,需要进入到仓库里面
- 要同步服务器代码就执行:git pull
- 本地仓库记录版本就执行:git commit -am “版本描述”
- 推送代码到服务器就执行:git push
- 编辑代码前要先git pull,编辑完再commit,最后推送再git push。要养成良好的习惯奥!
5.代码冲突问题
- 多人协同开发的时候,避免不了出现代码冲突的情况
- 也就是多人同时修改了同一个文件
- 这会影响正常的开发进度,并且使程序出错
- 一旦出现了代码冲突,必须先解决再做继续开发
代码冲突演练
1.小王先编辑login.py文件代码
- 进入小王本地仓库:cd ~/Desktop/xiaowang/xiangmu/
- 拉取服务器最新代码:git pull
- 编辑代码:address = “fux”
- 本地仓库记录版本:git commit -am “记录地址”
- 推送到远程仓库:git push
2.经理后编辑login.py文件代码
-
进入经理本地仓库:cd ~/Desktop/manager/xiangmu/
-
不拉取最新数据直接编辑代码:like = “敲代码”
-
本地仓库记录版本:git commit -am “记录爱好”
-
推送到远程仓库:git push 注意 此时会出现代码冲突!
提示需要先pull
![[外链图片转存失败(img-nGdS5nrb-1565262451080)(file:///C:/Users/%E6%B8%85%E9%A3%8E/Desktop/%E5%B0%B1%E4%B8%9A%E7%AC%AC%E4%BA%8C%E9%98%B6%E6%AE%B5%E8%AF%BE%E4%BB%B6/images/b-02gitimages/github%E5%86%B2%E7%AA%81%E6%8F%90%E7%A4%BA%E9%9C%80%E8%A6%81%E5%85%88pull.png)]](https://img-blog.csdnimg.cn/20190808191933659.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dhbmdUYW9UYW9f,size_16,color_FFFFFF,t_70)
提示冲突文件名
![[外链图片转存失败(img-ekc4DgJa-1565262451081)(file:///C:/Users/%E6%B8%85%E9%A3%8E/Desktop/%E5%B0%B1%E4%B8%9A%E7%AC%AC%E4%BA%8C%E9%98%B6%E6%AE%B5%E8%AF%BE%E4%BB%B6/images/b-02gitimages/github%E5%86%B2%E7%AA%81%E6%8F%90%E7%A4%BA%E5%86%B2%E7%AA%81%E6%96%87%E4%BB%B6.png)]](https://img-blog.csdnimg.cn/20190808191945232.png)
3.解决代码冲突问题
- 原则:谁冲突谁解决,并且一定要协商解决
- 方案:保留所有代码或者保留某一人代码
- 解决完冲突代码后,依然需要add,commit,push
![[外链图片转存失败(img-aqhgfuO1-1565262451081)(file:///C:/Users/%E6%B8%85%E9%A3%8E/Desktop/%E5%B0%B1%E4%B8%9A%E7%AC%AC%E4%BA%8C%E9%98%B6%E6%AE%B5%E8%AF%BE%E4%BB%B6/images/b-02gitimages/github%E5%86%B2%E7%AA%81%E8%A7%A3%E5%86%B3%E6%8E%A8%E9%80%81.png)]](https://img-blog.csdnimg.cn/20190808192000965.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dhbmdUYW9UYW9f,size_16,color_FFFFFF,t_70)
补充:
- 容易冲突的操作方式
- 多个人同时操作了同一个文件
- 一个人一直写不提交
- 修改之前不更新最新代码
- 提交之前不更新最新代码
- 擅自修改同事代码
- 减少冲突的操作方式
- 养成良好的操作习惯,先
pull在修改,修改完立即commit和push - 一定要确保自己正在修改的文件是最新版本的
- 各自开发各自的模块
- 如果要修改公共文件,一定要先确认有没有人正在修改
- 下班前一定要提交代码,上班第一件事拉取最新代码
- 一定不要擅自修改同事的代码
- 养成良好的操作习惯,先
6.标签
- 当某一个大版本完成之后,需要打一个标签
- 目的是为了记录版本号,备份大版本的代码
1.模拟经理打标签
-
进入到经理的本地仓库
cd ~/Desktop/manager/xiangmu/ -
经理先在本地打标签
git tag -a "标签名" -m ”标签描述" 例: git tag -a V1.0 -m “1.0版本"" -
推送标签到远程仓库
git push origin 标签名 例: git push origin v1.0
补充:删除本地和远程标签
# 删除本地标签
git tag -d 标签名
# 删除远程仓库标签
git push origin --delete tag 标签名
7.分支
- 作用:
- 区分生产环境代码以及开发环境的代码
- 增添新功能或者攻克难题
- 解决线上bug
- 特点:
- 项目开发中公用分支包括master、dev
- 分支master是默认分支,用于发布,当需要发布时将dev分支合并到master分支
- 分支dev是用于开发的分支,开发完阶段性的代码,需要合并到master分支
1.模拟经理分支操作
(1)进入到经理的本地仓库
cd ~/Desktop/manager/xiangmu
(2)查看当前分支
git branch
(3)经理创建并切换到dev分支
git checkout -b dev
(4)设置本地分支跟踪远程指定分支(将分支推送到远程)
git push -u origin dev
(5)经理在dev分支编辑代码不会影响到master分支的代码
(6)将dev分支合并到master分支
# 先进入master分支
git checkout master
# 然后合并
git merge dev
# 将合并分支推送到远程
git push
(7) 小王同步经理合并后的分支代码里面的内容
git pull
来源:https://blog.csdn.net/WangTaoTao_/article/details/98883486