Git
版本控制
是一种再开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份一边恢复以前的版本的软件工程技术
作用
- 实现跨区域多人协同合作开发
- 追踪和记载一个或者多个文件的历史记录
- 组织和保护你的源代码和文档
- 统计工作量
- 并行开发、提高开发效率
- 跟踪记录整个软件的开发过程
- 减轻开发人员负担,节省时间,同时降低人为错误
简单来说就是用英语管理多人协同开发项目技术
主流版本控制器有如下:
- Git
- SVN(subversion)
- CVS(concurrent Version System)
- VSS(Micorosoft Visual SourceSafe)
- TFS(Team Foundation Server)
本地版本控制
为了解决复制项目目录方式保存不同的版本带来的容易犯错,有时候会混肴所在的工作目录等问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。
集中化版本控制
(Centralized Version Control Systems,简称 CVCS)应运而生。 这类系统,诸如 CVS、SVN以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
分布式版本控制
每个人都拥有全部代码
不会因为服务器损坏或者网络问题,造成不能工作的情况!
于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。 在这类系统中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。
SVN和GIT区别
SVN:集中式版本控制系统,版本库是集中放在*服务器对的,而攻的时候用的是自己的电脑,所以首先要从*服务器得到最新版本,然后完成工作后,需要把自己昨晚的活推送到*服务器。
集中式版本控制系统是必须联网才能工作的,对网络贷款要求高。
Git是分布式版本控制系统,没有*服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了。协同方式:如何两人同时修改同一个文件,这是,两人只需要把各自修改推送给对方,可以互相看到对方修改。Git可以直接看到更新了那些代码和文件。
Git是目前世界上最先进的分布式版本控制系统
Git历史
Git是免费、开源的,最初的是为了辅助Linux内核开发的,代替BitKeeper
Linux,git创始人 李纳斯·托尔
基本的linux命令学习
- cd : 改变目录
- cd…回退到上一个目录
- pwd:显示当前所在的目录路径
- ls(||):都是列出当前目录中的所有文件夹,只不过||列出的内容更加详细
- touch:新建一个文件 如touch index.jsp 就会在当前目录下新建一个index.js文件
- rm:删除一个文件 如上
- mkdir:新建一个目录
- rm-r删除一个文件夹
rm-rf /
f递归/父级,删除全部文件切勿尝试 - mv 移动文件 mv index.jsp src index.jsp
- reset 重新初始化终端 清屏幕
- clear清屏
- history查看命令历史
- help帮助
- exit退出
- #表示注释
Git环境配置
Git Bash:Unix与linux风格的命令行,使用最多,推荐
Git cmd:windows风格命令行
Git GUI:图形界面GIT
rm -rf / linux中千万不要进行这操作,删除电脑中全部文件
GIt配置
查看不同级别的配置文件
git config --system --list //系统config
git config --global --list //查看当前用户配置
设置用户名和邮箱(用户标识,必要 文件地址C:\Users\35918\gitconfig)
git config --global user.name chencong
git config --global user.email [email protected]
环境变量只是为了全局使用而已,可以不用配
Git基本理论
工作区域
Git本地有三个工作区域:工作目录(working directory),暂存区(stage/index),资源库(repository或者git derectory),如果加上远程git仓库可以分为四个工作区域:
workspace:工作区,就是你平时存放项目代码的地方
index/stage:暂存区,用于临时存放你的改动,事实上它只是个文件,保存即将提交到文件列表信息
Respository:仓库区(本地仓库),安全存放数据的位置这里面有你提交到所有版本的数据,其中HEAD指向最新放入仓库的版本
Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目中的一台电脑用于远程数据交换
Git 的工作流程
- 在工作区添加、修改文件;
- 将修改后的文件放入暂存区域; git add.
- 将暂存区域的文件提交到本地仓库;
- 将本地仓库的修改推送到远程仓库。 git commit
Git项目搭建
创建工作目录与常用指令
创建本地仓库方法:
创建全新的仓库
$ git init
克隆远程仓库
$ git clone[url] #gitee 或者github 找到项目克隆下载https://gitee.com/kuangstudy/openclass.git
Git文件操作
文件四种状态
- untracked:未跟踪,此文件还在文件夹中,并没有加入到git库,不参与版本控制,通过git add状态变为stage
- Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为
Modified
. 如果使用git rm
移出版本库, 则成为Untracked
文件- Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过
git add
可进入暂存staged
状态, 使用git checkout
则丢弃修改过, 返回到unmodify
状态, 这个git checkout
即从库中取出文件, 覆盖当前修改- Staged: 暂存状态. 执行
git commit
则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify
状态. 执行git reset HEAD filename
取消暂存, 文件状态为Modified
查看文件状态
git status[filename] #查看指定文件状态 git status #查看所有文件状态 git add . #添加所有文件到暂存区 git commit -m #提交暂存区中的内容提交到本地仓库, -m 提交信息
忽略文件
IDEA项目中不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等
主目录下建立.gitignore文件
*.txt 忽略所有.txt文件 !lib.txt 但lib.txt除外 /temp 仅忽略项目根目录下的todd文件,但不包括其他目录的temp build/ 忽略build/目录下所有文件 doc/*.txt 会忽略doc/notes.txt 但不包括/doc/server/arch.txt
使用码云
github有墙,比较慢,**国内一般使用gitee,**公司有时候会搭建自己服务器gitlab
设置本机绑定SSH公钥,实现免密码登录,码云是远程仓库,我们平时工作再本地仓库
#进入到 C:\Users\35918\.ssh #git指令输入 ssh-****** -t rsa 生成公钥文件.pub
IDEA中集成Git
-
新建项目,绑定git
将我们远程的git文件目录拷贝到项目中即可
-
修改文件,使用IDEA操作git
IDEA创建项目时,项目目录就是git目录
- 添加到暂存区
- commit提交
- push到远程仓库
操作可以用命令进行
-
提交测试
Git分支
#列出所有本地分支
git branch
#列出所有远程分支
git branch -r
#新建一个分支,留在当前分支
git branch [branch-name]
#新建一个分支,切换到该分支
git checkout -b [branch]
#合并指定分支到当前分支
git merge [branch]
#删除分支
git branch -d[branch-name]
#删除远程分支
git push origin --delete[branch-name]
git branch -dr [remote/branch]
如果多个分支并行执行,就会导致我们代码不冲突,也就是同时存在多个版本!
master主分支应该分厂稳定,用来发布新版本,一般情况下不允许再上面工作,工作一般情况下再新建的dev分支上工作,工作完后,比如要发布,或者说dev分支代码稳定后可以合并到主分支master上