目录
一,前言
在学习git之前,先抛出一个名词“版本控制”。
(1)什么是版本控制
版本控制是指对软件开发过程中各种程序代码,配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。
个人理解:就是对开发过程中程序代码修改的方式。
(2)常见的版本控制工具
- Git
- SVN(Subversion)
- CVS(Concurrent Versions System)
- VSS(Micorosoft Visual SourceSafe)
- TFS(Team Foundation Server)
- Visual Studio Online
现在影响力最大且使用最广泛的是Git与SVN。
(3)版本控制分类
-
本地版本控制系统
本地版本控制系统就是在一台机器上,记录版本的不同变化,保证内容不会丢失,记录文件每次的更新,适合个人用,如RCS。
缺点:
如果多人开发,每个人都在不同的系统和电脑上开发,没办法协同工作。
-
集中式版本控制系統
集中式版本控制系统都有一个单一的集中管理的服务器(中央服务器),保存所有文件的修订版本,所有的用户电脑都是从中央服务器获取代码或者是将本地的代码提交到中央服务器。代表产品:SVN、CVS、VSS。
缺点:
- 依赖与网络环境,如果连不上中央服务器,就无法提交和获取代码。
-
数据保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。
-
分布式版本控制系统
分布式版本控制系统的客户端并不只提取最新版本的文件,而是把代码仓库完整地镜像下来。每个客户端都拥有全部代码。任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。
代表产品:Git。
优点:
不会因为服务器损坏或者网络问题,造成不能工作的情况!
缺点:
- 每个人都拥有全部的代码!安全隐患!(删库跑路这个梗相信大家也都知道)
- 只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。
(4)Git概述
同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。
Linux 内核开源项目有着为数众多的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。
到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。 (2周左右!) 也就是后来的 Git!
Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
Git是目前世界上最先进的分布式版本控制系统。
Torvalds李纳斯·托沃兹, linux之父,全名Linus Benedict Torvalds ,是一位出生于1969.12.28的芬兰人。
二,Git基本操作
(1) Git安装
下载对应的版本后,无脑安装就可以了。
(2)Git卸载
- 先删除Git的环境变量,鼠标移动至此电脑,右键点击属性,找到高级系统设置,点击环境变量,找到系统变量中的Path,双击打开,删除如图环境变量即可。
- 在通过电脑的应用程序管理,卸载即可
(3) 启动Git
安装成功后在开始菜单中会有Git项,菜单下有3个程序:任意文件夹下右键也可以看到对应的程序!
- Git Bash
Unix与Linux风格的命令行,使用最多,推荐最多
- Git CMD
Windows风格的命令行,当你在Windows上安装git并且习惯使用命令行时,可以使用cmd来运行git命令。
- Git GUI
图形界面的Git,不建议初学者使用,尽量先熟悉常用命令
(4)Git配置
Git安装之后需要进行一些基本信息设置
#任意地方,鼠标右键,找到Git Bash Here打开,进入终端
git config -- global user.name #设置用户名
git config -- global user.email #设置邮箱
git config --list #检查算法配置成功
这些基本信息都是存在本地的,进入C:\Users\Administrator\ .gitconfig(这里的路径并不是绝对),找到.gitconfig文件用文本编辑器打开,你就会找,你刚刚设置的用户名和邮箱。
(5)Git四大工作区解读
- Workspace工作区,就是你平时存放项目代码的地方。
- Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息。
- Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。(这里有一个小误区,就是在进行clone时,克隆结束,是不是发现克隆的文件是不是像放在workspace里,而不是Repository,而事实并不是这样,对于这里的理解,你可以通过切换分支,你会发现变得只是当前界面的文件,而目录却没有改变,这就说明该文件是存在仓库区的)
- Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换,像gitee,github都可以创建仓库。
(6)Git的常见指令
git init #初始化仓库、
git add . #添加文件到暂存区、
git commit #将暂存区内容添加到仓库中、
git stash save "save message" #放暂存区
git stash pop #把暂存区的代码取出来,与最新代码合并
git push <远程主机名> <本地分支名>:<远程分支名>
git push origin HEAD:分支名词 #origin代表自己的远程仓库,如果远程仓库没有这个分支会自动创建
git clone #拷贝一份远程仓库,也就是下载一个项目、
git fetch #从远程获取代码库、
git status #查看仓库当前的状态,显示有变更的文件、
git remote #远程仓库操作、
git pull #下载远程代码并合并、
git pull <远程主机名> <远程分支名>:<本地分支名>
git push #上传远程代码并合并、
git branch #列出分支基本命令、
git branch -a #列出所有分支基本命令、
git branch (branchname) #创建分支命令、
git checkout (branchname) #切换分支命令、
git merge #合并分支命令、
git branch -d (branchname) #删除分支命令、
git diff #比较文件的不同,即暂存区和工作区的差异、
git reset #回退版本、
git rm #删除工作区文件、
git mv #移动或重命名工作区文件、
git log #查看历史提交记录、
(7) Git文件的四种状态&忽略文件
版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。
- Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
- Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
- Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !
- Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等,在主目录下建立".gitignore"文件,此文件有如下规则:
- 忽略文件中的空行或以井号(#)开始的行将会被忽略。
- 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,...})代表可选的字符串等。
- 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
- 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
- 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
三,补充
常用的Linux命令
平时一定要多使用这些基础的命令!
- cd : 改变目录。
- cd . . 回退到上一个目录,直接cd进入默认目录
- pwd : 显示当前所在的目录路径。
- ls(ll): 都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细。
- touch : 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。
- rm: 删除一个文件, rm index.js 就会把index.js文件删除。
- mkdir: 新建一个目录,就是新建一个文件夹。
- rm -r : 删除一个文件夹, rm -r src 删除src目录
- rm -rf / 切勿在Linux中尝试!删除电脑中全部文件!
- mv 移动文件, mv index.html src index.html 是我们要移动的文件, src 是目标文件夹,当然, 这样写,必须保证文件和目标文件夹在同一目录下。
- reset 重新初始化终端/清屏。
- clear 清屏。
- history 查看命令历史。
- help 帮助。
- exit 退出。
- #表示注释
留言:
还有不多不足之处,望海涵,学海无涯苦作舟,你我皆是竞渡人!
后续会出Git项目流程
借鉴自:
【狂神说Java】Git最新教程通俗易懂_哔哩哔哩_bilibili
Git - Git 简史
关于本地、集中式、分布式三种版本控制系统【acoder吧】_百度贴吧
342 版本控制系统:概述,本地版本控制系统,集中式版本控制系統,分布式版本控制系統 - 冲啊! - 博客园
Git 安装配置全流程_上岸鱼见到了码农的博客-CSDN博客_git配置