[Git]版本管理:团队开发的重要工具

git 只能检测文本文件内容发生变化以及文件大小发生变化。其他的如图片视频等检测不出来

一、集中式的版本控制系统:SVN,CVS

  • 以前使用的代码版本管理工具

  • 版本库是集中存放在中央服务器(公司电脑)的,而干活的时候,用的是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了再把自己的活推送给中央服务器

  • 中央服务器就好比是一个图书馆.你要改一本书.必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

  • 集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟

二、分布式版本控制系统:Git

  • 分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。

  • 既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,

  • 你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了

三、分布式 VS 集中式

  • 集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。

  • 而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

  • 由于CVS自身设计的问题,会造成提交文件不完整,版本库莫名其妙损坏的情况。

  • 同样是开源而且免费的SVN修正了CVS的一些稳定性问题,是目前用得最多的集中式版本库控制系统。

  • Git的优势不单是不必联网这么简单,后面我们还会看到Git极其强大的分支管理,把SVN等远远抛在了后面。

多人配合,版本管理

SVN/CVS:客户端通过服务端的GIT下载资源到客户端进行修改

四、安装Git

(1)、Linux:

  • 终端中直接输入 sudo apt-get install git

(2)、 Mac:

  • 运行Xcode,菜单“Xcode”->“Preferences”,

  • 在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了

(3)、 Windows:

  • 下载地址:https://git-for-windows.github.io

  • 安装后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

  • 最后:

    • 在命令行输入名字和邮箱进行登记:

    • 必须先登记才能用,否则有的地方会提示你输入账户名和邮箱

    $ git config —global user.name “Your Name”
    $ git config —global user.email “[email@example.com](mailto:email@example.com)”

五、创建版本库(repository)

(1)版本管理仓库

可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

  1. 创建一个空的文件夹(frankGit),确保目录名和父级目录名没有中文和符号

  2. 命令行:git init 把这个目录变成Git可以管理的仓库,初始化git仓库

    • 会创建一个.git的隐藏文件,你可以手动将其显示出来(通过查看选项卡设置)

  3. tips:

    • 所有的版本控制系统,其实只能跟踪文本文件的改动,也就是在文本中修改和添加内容都可以被检测到。

    • 图片、视频、Word这种二进制文件,无法跟踪变化,只能检测文件大小发生了变化。

(2)、git仓库的运行机制

1、创建的文件先是在本地存放(临时存放),然后通过命令推到暂存区,最后再通过命令,从缓存区推到git仓库中

2、这三个阶段都属于存放在本地,需要始终保持三区一致

  1. 本地文件,临时区

  2. 缓存/暂存区,缓存区

  3. 仓库,核心版本仓库区

(3)、常见的linux命令

/  //斜杠表示计算机根目录
ctrl+c //关闭服务器
cd 文件夹名  //找到这个文件夹(目录),和cmd的cd命令一样
cd /符盘号   //加上斜杠,表示进入指定符盘,相当于cmd的e:
ls //列出当前目录下的所以文件,相当于cmd的dir
clear  //清屏,相当于cls
pwd //表示输出当前窗口所在的路径
mkdir 文件夹名  //创建一个目录(文件夹)
mkdir 文件夹名字 //常见目录文件夹
touch 文件名 //表示创建一个文件,(任何类型的文件都行,如js、css、html、md、txt等等)
cat 文件名 //表示预览文件内容
vi/vim 文件名  //表示这个文件进入编辑页面,vim是升级版
//以下进入编辑页面后的git命令:
i //切换到编辑模式
按下esc按键  //退出关闭编辑模式
:w  //保存文件
:q  //退出文件
:wq //保持并且退出编辑页面

六、git命令

  • git有新的一套命令行操作

  • GIT Gul here //图行

  • GIT Bash here //文本,主要使用这个命令行

  • ctrl+鼠标滚轮可以放大缩小字体

1、git命令

(1)、创建版本

git init //初始化git仓库,即开启一个git仓库,让这个文件目录变成git可以管理的仓库
​
git add 文件名 //将指定本地文件推到缓存区
git add .  //将所有本地文件提交到缓存器 
git commit -m"写入注释" //将文件从缓存区推向仓库,注释一定要写
//以上三个步骤只是将文件推送到本地仓库里,需要使用git push才能将文件推送到云端
​
git status //查看仓库当前状态 ,[每次修改,如果不add到暂存区,那就不会加入到commit中。]
//如果去修改了以经存放到仓库里的文件内容,再次使用,git status命令去查文件状态,会爆出提示,本地文件和缓存不一样…………,需要重复之前的推送步骤
git diff //different的缩小,查看修改的具体内容,只在本地阶段的时候我们才能看到修改的内容,如果做了提交则看不到了

(2)版本回退

git log  //查看提交文件的历史记录(提交时每次的备注很重要)
git log --pretty=oneline //美化输出历史纪录输出结果,可以看到一个16进制的版本号
  
git reset --hard HEAD^  //回退到上一个版本
git reset --hard 版本号前几位/完整的版本号  //跳转到指定版本号的版本
​
git reflog  //查看命令的历史纪录,【这里可以查看到所有文件的版本号】

(3)、撤销修改

git checkout --文件名  //(1)撤销本地文件的修改,[在没有提交的前提下]
                        //(2)如果是误删,可以撤销删除操作(本地)
​
git reset HEAD 文件名  //撤销暂存区文件的修改(暂存器)
​
git reset --hard HEAD^  //撤销版本库存里文件的修改:回退到上一个版本(仓库)

(4)、删除文件

rm 文件名 //删除本地文件,其他两个区的还存在
git status  //会提示本地版和版本库不一致
​
git rm 文件名  //删除缓冲区的文件
​
git commit -m  "本次删除了xx文件,以此为距"  //删除版本库里面的文件
​
git checkout --文件名  //如果是误删,可以撤销操作(本地)
​

七、配置远程仓库,配置公钥

GitHub:用于提供Git仓库托管服务 ,只要注册一个GitHub账号,就可以免费获取Git远程仓库

GitHub是国外的,gitee是国内的,用于提供git仓库托管平台

配置公钥才可以上传代码到平台上

步骤:

  1. 打开github,注册一个账号。

  2. 创建ssh key,在C:\用户\用户名.ssh目录,如果没有id_rsa文件和id_rsa.pub文件,就需要创建。

    ssh-keygen -t rsa -C “[154580967@qq.com](mailto:154580967@qq.com)” 
    • 打开git的面板里输入以上这条命令[输入你自己注册时用的邮箱名]

    • 一路默认即一路回车

    • 如果不配置ssh公钥的话,你的电脑的本地文件是提交不上去代码的,必须配置,你换一台电脑需配一次

    • 然后去C盘用户文件夹里面找到ssh目录文件夹里,有id_rsa文件和id_rsa.pub文件。

    • 将id_rsa.pub文件用记事本打开,复制里面的内容粘贴到,gitee码云平台设置里面的SSH,粘贴到SSH公钥里面,标题就是邮箱名,粘贴上密钥后会自动填上标题

  3. 登录GitHub,打开“Account settings”,“SSH Keys”页面:

    3-1. 点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

        3-2. 点“Add Key”,就应该看到已经添加的Key: [在GitHub上免费托管的Git仓库,任何人都可以看到。所以,不要把敏感信息放进去。]

八、新建仓库有两种方式

仓库与仓库之间是独立的,不能互相嵌套

  1. 从本地新建文件夹,新建本地git版本仓库,从本地把它推送到码云上去

  1. 第一种,先在云端码云上新键一个仓库,把他下载下来到本地来即克隆。然后到本地做修改然后提交上去即可

1-从本地同步到远程库

已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步

//1、新建一个文件夹,cd进入文键夹,使用git init 初始化创建git本地仓库
//2、可以去viscode进行操作
//3、配置一个远程仓库地址
    //1、去码云创建一个新的空的云端仓库,这个云端仓库名称要和本地仓库的名字一致。
    //2、复制云端远程地址
    //3、输入命令,git  remote  add  <name><url>,让本地仓库和远程仓库链接起来,[仓库名称  仓库地址]
   //4、如果直接git  push 有错的话,就是根据提示来,比如下面那样
    //git push --set -upstream <name> 分支名

步骤:

  1. 登录GitHub,在右上角找到“Create a new repo”按钮,创建一个新的仓库

  2. 在Repository name填入frankGit,其他默认,点击“Create repository”,就成功地创建了一个新的Git仓库

  3. 命令行:git remote add origin git@github.com:自己的帐户名/frankGit.git //origin是自定义远程库的名字 [git 解决fatal: Not a git repository:git init]

  4. 命令行:git push -u origin master //将当前分支推送到远程,并将本地master和远程master关联起来 [推送前确保本地仓库是有东西的,commit过的]

  5. 命令行:git push origin master //把本地master分支的最新修改推送至GitHub


2-从远程库克隆到本地

1、在gitee里点击右上方+号,创建仓库,仓库名根据项目而定,选择开源[所有人可见可用]/私有[仅仓库成员可见,可邀请成员]
2、点击创建,生成一个空的仓库出来,,会生成一个链接地址 ,复制,[后面会有用]
3、勾选inltlalize this respository a readme[自动创建readme.md文件可勾选可不勾选]
4、找到你要上传到云端的文件夹,在git命令行,输入:git clone 粘贴上刚刚复制的自动生成的链接
5、回车,出现一个文件夹,即你刚刚再码云上创建的一个仓库,然后cd 仓库名,进入仓库才能进行操作
5、touch readme.md , git add readme.md , git commit -m"提示信息"
6、输入git push 命令,将文件推送上云端
7、如果出现用户名或密码错误,则需要:进入控制面板——>用户账号——>管理window凭据——>普通凭据git:https://giteer,将这块内容给删除掉
8、重新克隆
9、完成

  1. 登录GitHub,创建一个新的仓库,名字叫gitskills

  2. 勾选Initialize this repository with a README,自动创建README.md文件。

  3. 命令行:git clone git@github.com:自己的帐户名/gitskills.git [可让多人从同一个仓库下载到自己的本地进行开发]

九、分支管理

  1. 分支就是科幻电影里面的平行宇宙,如果两个平行宇宙互不干扰,那对现在的你也没啥影响。

  2. 互不影响,相互独立

  3. 默认分支:master(主分支)

    1. master分支一般用来放置一些测试已经通过,可以上线的代码

  4. dev 分支:用于当前正在开发过程中的分支

  5. buy分支:某个业务功能的测试分支,[如果这个分支做的好,和dev分支合并,不好就删除掉]

使用:

  1. 命令行:git branch dev //创建分支dev

  2. 命令行:git checkout dev //切换到dev分支

  3. 命令行:git checkout -b dev //创建分支dev,并切换到dev分支

  4. 命令行:git branch //查看当前分支,前面带*号的就是当前分支

  5. 命令行:git add readme.md

             
      git commit -m "本次是从dev分支提交的"

  6. 命令行:git checkout master //切换回master

  7. 命令行:vi readme.md //再查看文件,会发现文件中刚添加的内容不存在了。

  8. 命令行:git merge dev //合并指定分支到当前分支

  9. 命令行:git branch -d dev //删除dev分支

  10. 命令行:git branch //再查看,dev分支就没有了

  11. 如果两个分支同时修改一个文件并提交。再合并,就会出现冲突。

  12. 只需要将冲突的文件打开,删除标记,重新add和commit

  13. 命令行:git branch -d dev

  14. 命令行:git log --graph //查看分支合并图


强行删除分支(feature)

  1. 命令行:git checkout -b feature //创建新分支并切换

  2. 命令行:vi work.js //创建work.js文件

  3. 命令行:git add work.js //添加到缓存区

  4. 命令行:git commit -m “添加一个新的分支咯” //添加到版本库一个新分支

  5. 命令行:git checkout dev //切换回dev分支

  6. 命令行:git branch -d feature //还未合并就要马上删除feature分支

  7. 命令行:git branch -D feature //必须强行删除才可以

  • 没有合并就要删除分支的话需要使用强制删除


多人协作

  1. 命令行:git remote //查看远程库的信息

  2. 命令行:git remote -v //显示更详细的远程库信息

  3. 命令行:git push origin master //把master分支上的所有本地提交推送到远程库

  4. 命令行:git push origin dev //推送dev分支到远程库 强制推送:git push -u origin dev -f

  5. 当自己和伙伴提交有冲突时,使用git pull把最新的提交从远程库下载下来,在本地合并,再推送。

     命令行:git branch --set-upstream dev origin/dev      
    //指定本地dev分支与远程origin/dev分支的链接 
     命令行:git pull --rebase origin master

  6. 命令行:git add readme.md

  7. 命令行:git commit -m “合并后再提交”


工作流程

[repository-点击settings-选择collaborators-搜索框中搜索合作者账号然后add,然后给合作者发确认邮件] [必须在SSH中添加合作者的pub.key]

  1. 克隆到本地环境

  2. 修改文件先在本地进行提交

  3. 用git push origin branch-name推送自己的修改;

  4. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull origin branch-name 试图合并;

  5. 如果合并有冲突,则解决冲突,并在本地提交;

  6. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

  7. 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建, 用命令git branch —set-upstream branch-name origin/branch-name。

  8. git 出现 fatal: refusing to merge unrelated histories 错误,其实这个问题是因为 两个 根本不相干的 git 库 git pull origin master —allow-unrelated-histories 把两段不相干的 分支进行强行合并 [master:主分支要时刻与远程同步] [dev:开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步] [bug:本地修复bug记录,不需要推送到远程] [feature:取决于你是否和你的小伙伴合作在上面开发]

云端仓库管理

  • 仓库——管理——删除仓库

  • 仓库——管理——仓库成员管理——成员权限[管理员/开发者……]——添加仓库成员——邀请链接+直接添加+通过仓库邀请成员

  • 将仓库地址复制,进入本地文件去修改,然后推送

  • git pull //拉取,表示将本地代码更新为云端最新的代码,然后再git push

  • 上图表示,云端代码和本地代码发生冲突,此时需要将文件整理好再进行提交

    • 表示两个人修改同一份文件发生冲突,第三个人再次修改的时候,把一些乱七八糟的符号删掉再提交

    • 出现特殊符号表示内容冲突

  • 如果每次每个人都提交不同的文件就不会发生冲突问题

十、Visode的git使用

viscode插件

  1. 目录

  2. 全局搜索

  3. git

    • 左上侧,三个点,点开就是拉取、推送、克隆

    • 当修改文件后点击小园圈里的1,就会出来一个修改前后的对比图,

    • 文件旁边会有个小+号,这个就是git add 文件。表示将这个文件推送到缓存区

    • 更改旁边的+符号,表示将所有的文件提交到缓存区,相当于add .

    • 再上面的框里输入,add commit -m"注释",表示推送到仓库,点击最上面的对勾就是commit提交了

    • 然后,三个点的地方拉取pull,之后提交push

    • 左下角,分支选取

    • 上面的是viscode自带的。有一款git插件[Gitlens-Git supercharged],可用可不用,

      • 可用提供更丰富的

      • 可以提示哪一行是谁提交的,什么时候提交的

  4. 调试

  5. 下载插件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值