让你通俗易懂的Git仓库代码管理

Linux 常用DOS命令

git仓库代码管理是基于linux命令开发的,以下是常用的linux DOS命令

ls -l/-a : 查看当前目录结构(-a是可以查看所有的,包括隐藏的文件)
cd xxx[路径地址] : 进入到执行的文件夹中(进入的路径地址,可以粘贴对应的操作命令窗口当中)
cd / : 根目录
cd ./ : 当前目录
cd ../ : 上级目录
clear : 清屏
mkdir :创建文件夹
touch : 创建空的文件
vi : 想文件中插入或者管理一些内容 i 进入插入模式
esc键 + :wq : 退出内容的插入模式,把刚才编辑的内容进行保存
echo 内容 >文件名 : 向指定的文件中输入内容
cat : 查看文件中的内容
cp : 拷贝
rm -f : 删除文件 / 文件夹 -r(递归删除) -f(强制删除) 一旦删除无法还原
sudo rm -r -f : 管理员删除文件 / 文件夹


GIT安装

windows系统安装
链接:http://git-scm.com 下载后默认选项安装即可(msysgit )

mac系统安装
链接:http://brew.sh (安装homebrew)

检验是否安装成功

$ git --version

npm的应用

目前“工程化/自动化”开发(不一定是写后台),都是基于node环境,基于npm管理模块,机务webpack实现模块之前的依赖打包,部署上线等


1. npm常规操作
$ npm install xxx 把模块安装到当前目录
$ npm install xxx -g 把模块安装在全局目录下
$ npm uninstall xxx / npm uninstall xxx -g 卸载模块
$ npm install xxx@xxx 安装指定版本号的模块
$ npm view xxx > xxx.version.txt 查看模块的历史版本信息
解决下载慢问题

npm的默认安装源都是在:https://www.npmjs.com/,在国内安装,下载速度较慢,想要下载速度快一些,我们可以如下处理:

安装cnpm,后期都是基于cnpm安装管理

$ npm install cnpm -g
$ cnpm install zepto

使用淘宝镜像,首先安装nrm切换源工具,基于nrm把源切换到淘宝源上

$ npm install nrm -g 把nrm切源工具安装在全局
$ nrm ls 查看当前可用源
$ nrm use xxx 使用某个源
这样处理完成后,后期的管理依赖基于npm即可

基于yarn安装:它也是模块管理器,类似于npm,但是安装管理的速度比npm快的很多

$ npm install yarn -g
$ yarn add xxx
$ yarn remove xxx
使用yarn只能把模块安装到当前目录下,不能安装到全局环境下

brower也是类似于npm的包管理器,只不过它是从gitHub下载安装

$ npm install bower -g
$ bower install xxx
解决安装版本问题

首先查看当前模块历史版本信息
npm view jquery > jquery.version.json :把当前模块的历史信息输出到具体的某个文件中(文件名自己随便起)
yarn add [email protected]:安装指定版本号,npm和yarn都是这样来指定安装具体版本模块的


2. 环境依赖项

安装在本地环境中,环境依赖项。在本地项目中基于npm / yarn 安装第三方模块

第一步:初始化
初始化配置清单:在本地创建一个package.json 的文件。作用:把当前项目做有依赖的第三方模块信息(包含模块名称以及版本号等信息)都记录下来;

创建package.json

 $ npm init -y 或者 $ yarn init -y
  • 基于yarn会默认生成一个配置清单,只是信息没有手动创建的全面
  • 创建配置清单的时候,项目目录中不应该出现中文和特殊符号,这样有可能识别不了

第二步:安装

  • 开发依赖(dev):只有在项目开发阶段依赖的第三方模块
  • 生产依赖(dep):项目部署实施的时候,也需要依赖的第三方模块

npm安装:

npm install xxx --save 保存到配置清单的成产依赖中
npm install xxx --save-dev 保存到开发依赖中

yarn安装:

yarn add xxx 默认就是保存到生产依赖
yarn add xxx --dev / -D 保存到开发依赖中

第三步:部署的时候“跑环境”
执行 npm install 或者 yarn install 即可,npm会自己检测目录中是否有package.json文件,如果有的话,会按照文件中的配置清单依次安装。

配置清单意义:
开发一个项目,我们需要配置清单“package.json”,当我们安装第三方模块使用的时候,把安装的模块信息记录到配置清单中,这样以后不管是团队协作开发还是项目部署上线只需要按照清单中的依赖及版本号,重新安装即可(重新安装:跑环境)

package.json 文件记录信息

{
  "name": "view",      //=>文件名
  "version": "1.0.0",  //=>版本号
  "description": "",   //=>模块描述
  "main": "index.js",  //=>当前模块的主入口文件
  "scripts": {         //=>可执行脚本
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {    //=>生产依赖
    "axios": "^0.18.0",
    "bootstrap": "^4.3.1",
    "vue": "^2.6.10"
  },
  "devDependencies": {//=>开发依赖
    "less": "^3.9.0"
  }
}

安装在本地和全局的区别

安装在全局特点

  • 所有的项目都可以使用这个模块
  • 安装在全局可以使用命令操作
  • 劣势:
    • 容易导致版本冲突
    • 安装在全局模块不能基于commonJS模块规范调取使用

安装在本地特点

  • 只能在当前项目使用这个模块
  • 劣势:
    • 不能再接的使用命令操作
npm root / -g 查看本地项目或者全局环境下,npm的安装目录

安装在全局目录下的模块,但部分会生成xxx.cmd 的文件只要有这个文件,那么xxx就是一个可执行的命令(例如:yarn.cmd => yarn就是命令)


安装在本地使用命令操作

把模块安装在本地,如果是支持命令操作的(会在node_modules的bin中生成xxx.cmd的命令文件,只不过这个文件无法再全局下执行 => 不能直接命令)

在package.json的scripts中配置需要执行的命令脚本

"scripts":{
    "zx":"lessc -v" 属性名自己设置即可,属性值是需要执行的命令脚本,根据需要编写(可以配置很多命令的)
}

这样的操作就是把配置的脚本执行

npm run zx / yarn zx 
  • 首先到配置清单的scripts中查找
  • 找到把后面对应的属性值(执行脚本)执行
  • 执行脚本的时候,会到本地node_modules中bin文件夹查找,没有的话会向npm安装的全局下查找

GIT的基础知识

git是一个分布式代码版本管理控制系统

  • 记录当前产品代码的所有版本信息(历史修改信息)而方便快速回退到某一个具体版本
  • 方便团队协作开发,能够检测代码冲突,能够合并代码等

GIT分布式版本控制器

SVN特点(集中式)

版本控制系统

  • 开发中我们把每一次的修改都有效的进行记录(记录成一个版本),后期如果需要回退原有的版本或者是用当前的和某一个版本进行比较等,都可以有效的进行管理
  • 所有的版本都是在中央服务器上建立的,本地客户端只是一个开发的环境,开发完成需要推送到服务器上生成历史版本,需要回退到某个版本也需要从中央服务器上拉,必须链接上中央服务器才可以——必须连网
GIT特点(分布式)

分布式管理系统特点

  • 所谓分布式,就是每个开发者的客户端都是一个完整的仓库,都能记录历史版本信息,这样就不需要联网我们也能生成版本记录,也可以快速回退到某个版本
  • Linux团队开发的GIT,所以git中的命令大部分都是linux命令

总结:GIT是按照源数据(文件流)来实现文件传输的,而SVN是按照文件传输的,所以GIT比SVN更快


GIT的常规操作

① 初次使用git,先在本地配置一些基础信息

如果是第一次使用git,生成历史版本的时候,需要提供身份认证,只要在本地git全局环境下配置一些信息即可。

git config -l:查看当前配置全局信息
git config --global user.name 'xxx'`: 增加用户名
git config --global user.email 'xxx'` :增加邮箱

注意:建议大家在配置的用户名和邮箱和 gitHub保持一致(这样以后在本地向gitHub推送内容的时候,能够展示出是谁推荐的)

**每一个GIT仓库都有三个分区 **

  • 工作区:写代码 【 红色:代表工作区文件 】
  • 暂存区:临时存放每一次修改的代码,但是并没有生成历史版本 【 绿色:暂存区 】
  • 历史区:存放所有历史版本的地方(提交到历史区就会生成历史版本)【 什么都不显示代表已经提交到历史区 】

② GIT常用命令

这些是各种场合常见的 Git 命令:

开始一个工作区(参见:git help tutorial)
   clone      克隆仓库到一个新目录
   init       创建一个空的 Git 仓库或重新初始化一个已存在的仓库

在当前变更上工作(参见:git help everyday)
   add        添加文件内容至索引
   mv         移动或重命名一个文件、目录或符号链接
   reset      重置当前 HEAD 到指定状态
   rm         从工作区和索引中删除文件

检查历史和状态(参见:git help revisions)
   bisect     通过二分查找定位引入 bug 的提交
   grep       输出和模式匹配的行
   log        显示提交日志
   show       显示各种类型的对象
   status     显示工作区状态

扩展、标记和调校您的历史记录
   branch     列出、创建或删除分支
   checkout   切换分支或恢复工作区文件
   commit     记录变更到仓库
   diff       显示提交之间、提交和工作区之间等的差异
   merge      合并两个或更多开发历史
   rebase     在另一个分支上重新应用提交
   tag        创建、列出、删除或校验一个 GPG 签名的标签对象

协同(参见:git help workflows)
   fetch      从另外一个仓库下载对象和引用
   pull       获取并整合另外的仓库或一个本地分支
   push       更新远程引用和相关的对象

命令 'git help -a' 和 'git help -g' 显示可用的子命令和一些概念帮助。
查看 'git help <命令>' 或 'git help <概念>' 以获取给定子命令或概念的帮助。

git init : 会在当前目录创建一个空GIT仓库,文件目录中生成 .git 的隐藏文件夹
git add -a/. :把当前工作区修改的内容全部提交到暂存区
git add xxx.js :具体文件提交到暂存区
git diff:显示提交之间、提交和工作区之间等的差异
git commit -m'[备注]':把暂存区的内容提交到历史区,生成一个历史版本(我们需要写备注信息,声明当前版本的特点)

git commit:提交版本信息
注意:直接输入`git commit` 执行会弹出一个提示文本界面,需要我们编写本次提交到历史区的版本信息和备注内容。

步骤:
1. 先按"i"进入编辑插入模式
2. 输入备注信息
3. 按ESC键
4. 输入":wq" 保存并退出 

git status:查看当前修改的文件处于哪一个区域

③ 把暂存区的某一个文件删除(提交到暂存区的内容不好,我们可以删除)

git rm --cached :把暂存区的某一个文件撤回到工作区
git rm --cached . -r:删除暂存区所有提交的文件

注意:如果在删除过程中,发现从暂存区撤销的文件在工作区已经被修改了,只有加上-f才能强制从暂存区把内容删除掉。 git rm --cached -f

④ 提交到暂存区一份,把工作区内容改了,但是改的东西不好,想把暂存区上次提交的内容撤回到工作区(覆盖工作区新写的内容)

git checkout :把暂存区文件撤回到工作区覆盖工作区文件

总结:每一次区域信息的提交都不会删除原有区域中的内容,这样保证下一次提交,只是把区域对比出来不一样的内容提交,而不是所有。

⑤ 查看每个区代码区别

git diff :工作区 vs 暂存区
git diff master :工作区 vs 历史区MASTER分支
git diff --cached :暂存区 vs 历史区

⑥ 查看历史版本信息

git log 查看提交记录
git reflog 查看所有历史的记录 (包括历史区回滚后)

⑦ Git忽略上传文件配置
.gitignore 后缀文件,GIT提交的忽略文件,这个文件存储了当git提交时候所忽略的文件

注意:真实项目中,并不是所有的文件都和项目有关系(例如:.idea是webstorm生成的配置文件夹和项目没关系… ) 通过linux 命令 touch .gitignore 后缀文件

忽略上传通用文件设置

# dependencies
node_modules
# testing
/coverage
# production
/build
#misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.produvtion.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
#webStorm
.idea

gitHub仓库管理代码

  • 一个提供代码管理(托管)的公共平台,我们以及众多开发者,会把自己的生产组件/类库/插件/框架/等托管到这个平台中,供别人下载使用和研究。在gitHub中,我们可以创建仓库来管理自己的项目文件,而gitHub支持开发者通过git操作,把本地的项目代码推送到指定的仓库中,它提供静态web页面的发布。
  • 在国内有一个和gibHub类似的网站:coding;和gitHub 类似也是提供代码管理平台。
第一、gitHub的远程仓库关联

让本地的git仓库和远程仓库建立关联

git remote -v :查看所有的关联信息
git remote add [name] [远程仓库地址] :建立关联

我们远程仓库关联在一起的名字默认:origin,当然自己可以随意改动

git remote remove [name] :移除关联

第二、GIT推送和拉取信息
  • 把本地代码推送到远程仓库上或者从远程仓库上拉取最新的信息到本地仓库
  • 我们本地推送和拉取的信息,既有代码也有版本信息,与其说是推送和拉取信息,不如说是和远程仓库保持信息的同步。
  • 为了避免本地代码和远程仓库代码发生冲突,在推送信息之前,我们都应该先拉取信息

拉取信息

git pull [name] :这个名字就是和远程仓库关联的这个名字,以自己设置的为主。master从远程仓库的master分支拉取最新信息。

推送信息

git push [name] master :把自己本地信息推送到远程仓库的master分支下

注意:以上操作是基础知识点

第三、真实开发项目流程
  • LEADER会首先创建一个远程仓库( 这个仓库可能是空的,也可能是包含了项目需要的基础结构信息 )
  • 作为开发者,我们需要在本地创建一个本地仓库,还需要让当前本地的仓库和远程仓库保持关联。

原始做法:

git init 
git remote add origin [git仓库地址]

简单做法:

  1. git clone [远程仓库地址] [克隆后的名字:可以不设置,默认是仓库名
  2. 在本地开发产品,需要同步的时候,我们首先把工作区内容提交到暂存区 git add . 然后在仓库中放到历史区,生成版本信息 git commit -m'版本信息'
  3. 在把本地历史区的信息推送到远程仓库上 git pull / git push
  4. 在团队协作开发的时候,leader会在自己的gitHub账号下创建一个远程仓库,那么团队其他成员向这个远程仓库推送信息的时候,使用自己的账号是没有没送权限的,我们需要把当前这个远程仓库添加写协作者,让他人用自己的账号也有操作权限。
  5. 小组成员在自己的邮箱中收到一封邀请邮件,需要对方确认同意。

单独分支管理模式

一、每天第一件事是把master内容拉取到本地master上(提交之前也是),每个人在自己本地仓库中先进行分支创建和切换

  • 查看当前存在的分支
git branch *master 星代表当前在哪个分支上
  • 创建一个叫dev的分支(创建分支完成,会把本地的master分支中的内容同步到dev分支上)
git branch dev 
  • 切换到dev分支上
git checkout dev
  • 创建并切换到这个分支上
git checkout -b dev

二、单独分支管理模式

  1. 正常的开发和提交,但是所有的操作都是在自己的分支上
  2. 把自己本地分支中的内容,合并到自己本地 master 分支上
  3. git stash 暂存文件(分支有更改,不能直接切换分支,需要把修改的内容暂存)
  4. 先切换到 master 的分支上
  5. git stash pop 还原暂时存储的内容 git merge devdev 分支合并到 master 分支上(有冲突按照之前的规格修改)

你可能感兴趣的:(让你通俗易懂的Git仓库代码管理)