Git版本管理工具零基础学习

Git版本管理工具零基础学习
参考教程【狂神说Java】Git最新教程通俗易懂_哔哩哔哩_bilibili一、版本控制概述1、版本控制的基本概念1版本控制Revision control是一种在开发的过程中用于管理文件、目录或工程等内容的修改历史方便查看更改历史记录备份以便恢复以前的版本的软件工程技术。2版本控制的优势①实现跨区域多人协同开发。②追踪和记载一个或者多个文件的历史记录。③组织和保护源代码和文档。④统计工作量。⑤并行开发、提高开发效率。⑥跟踪记录整个软件的开发过程。⑦减轻开发人员的负担节省时间同时降低人为错误。2、传统版本控制的缺陷没有进行版本控制或者版本控制本身缺乏正确的流程管理在软件开发过程中将会引入很多问题如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性以及软件的整合等问题。二、版本控制分类1、本地版本控制传统版本控制1在本地记录文件每次的更新可以对每个版本做一个快照或是记录补丁文件适合个人用如RCS。2个人版本控制往往较为随意每个人会有自己不同的“管理规则”且版本管理均在本地进行如版本变更通知不到位将会引发不可预期的后果。2、集中版本控制1所有的版本数据都保存在服务器上协同开发者从服务器上同步更新或上传自己的修改即可。2所有的版本数据都存在服务器上用户的本地只有自己以前所同步的版本如果不连网用户看不到历史版本无法切换版本验证问题或在不同分支工作。此外所有数据都保存在单一的服务器上若这个服务器损坏将会丢失所有的数据。3、分布式版本控制1所有版本信息仓库全部同步到本地的每个用户这样所有人都可以在本地查看所有版本历史可以离线在本地提交文件只需在连网时push到相应的服务器或其他用户那里即可。2由于每个用户保存的都是所有的版本数据倘若服务器崩溃只要有一个用户的设备没有问题就可以恢复所有的数据不过这也增加了本地存储空间的占用。三、版本控制工具1、常见的版本控制工具1主流的版本控制器有Git、SVNSubversion、CVSConcurrent Versions System、VSSMicorosoft Visual SourceSafe、TFSTeam Foundation Server、Visual Studio Online。2版本控制产品非常的多比如Perforce、Rational ClearCase、RCSGNU Revision Control System、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault这些都是版本控制产品现在影响力最大且使用最广泛的是Git与SVN。2、Git与SVN的主要区别1SVN是集中式版本控制系统版本库集中放在中央服务器而工作的时候基本用的都是自己的电脑所以首先要从中央服务器得到最新的版本然后工作完成工作后需要把自己做完的文件推送到中央服务器。集中式版本控制系统必须联网才能工作对网络带宽要求较高。2Git是分布式版本控制系统没有中央服务器每个人的电脑就是一个完整的版本库工作的时候不需要联网因为版本都在自己电脑上当某个人修改了文件时可以直接将自己的变更点推送至服务器以及其他协同工作人员。四、使用Git的预备知识1、Git的三个程序1Git Bash使用Unix与Linux风格的命令行使用最多推荐最多。任一文件夹下右键都可以在该目录下打开此终端2Git CMD使用Windows风格的命令行。任一文件夹下右键都可以在该目录下打开此终端3Git GUI图形界面的Git不建议初学者使用。2、常用的Linux命令1“cd ..”回退到上一级目录。2“cd 绝对/相对路径”切换当前目录。3“pwd”获取当前所在目录或者说路径。4“clear”清除当前终端的显示信息不改变当前路径也不改变其它什么内容。5“ls”列出当前目录下的所有文件。6“touch 带格式后缀的文件名”在当前路径新建一个指定格式的文件。7“rm 带格式后缀的文件名”删除当前路径下的指定文件。8“mkdir 文件夹名”在当前路径新建一个文件夹。9“rm -r 文件夹名”删除当前路径指定的文件夹。10“mv 带格式后缀的文件名 路径名”将当前路径下的指定文件移动至指定的路径下。11“history”查看打开终端以来输入过的命令序列。12“exit”退出终端。3、Git配置1Git配置查看①使用命令“git config --system --list”可以查看系统配置系统配置文件在Git的安装目录下Git\etc\.gitconfig。②使用命令“git config --global --list”可以查看用户的本地配置本地配置文件在C盘用户文件夹下C:\Users\Administrator\ .gitconfig。③使用命令“git config -l”可以查看所有配置。2Git配置设置①当安装Git后首先要做的事情是设置用户名称和e-mail地址因为每次Git提交都会使用该信息它被永远的嵌入到用户的提交中。配置一次即可完成配置后配置文件随之被永久修改②在终端输入如下两条命令即可设置用户名称和e-mail地址。git config --global user.name Zevalin #名称引号内内容自定义git config --global user.email 2210020649qq.com #邮箱具体地址自定义4、Git基本理论1几个区域①Git本地有三个工作区域——工作目录Working Directory、暂存区Stage/Index、资源库Repository或Git Directory如果再加上远程的git仓库Remote Directory就可以分为四个工作区域。②每步文件流转对应的终端命令如下图所示可简单认为左边是上传仓库流程右边是更新本地文件流程Workspace工作区就是用户平时存放项目代码的地方。Index / Stage暂存区用于临时存放用户的改动。Repository仓库区或本地仓库就是安全存放数据的位置这里面有用户提交的所有版本的数据其中HEAD指向最新放入仓库的版本。Remote远程仓库托管代码的服务器可以简单地认为是项目组中的一台电脑用于远程数据交换。③Git的一般工作流程——在工作目录中添加、修改文件将需要进行版本管理的文件放入暂存区域再将暂存区域的文件提交到Git仓库往往需要推至远程仓库。因此Git管理的文件有三种状态——已修改modified、已暂存staged、已提交committed。五、Git项目搭建与文件操作1、创建工作目录与常用指令1工作目录WorkSpace一般就是希望Git帮助管理的文件夹可以是项目的目录也可以是一个空目录建议不要有中文。2日常使用只要记住下图6个命令2、本地仓库搭建1示例——创建全新仓库①打开测试所用路径“D:\gitcode_test”在此路径下打开Git Bash。②使用命令“git init”在当前目录新建一个Git代码库。2克隆远程仓库①克隆远程仓库实质上是将远程服务器上的仓库完全镜像一份至本地。②在码云Gitee上创建一个测试使用的仓库。③打开测试所用路径“D:\gitcode_test”在此路径下打开Git Bash。④使用命令“git clone url”将远程服务器上的仓库完全镜像一份至当前路径。3、Git文件操作1文件的四种状态①Untracked: 未跟踪此文件在本地文件夹中但并没有加入到git库不参与版本控制可通过“git add”命令将状态变为Staged。②Unmodify文件已经入库未修改即版本库中的文件快照内容与文件夹中完全一致这种类型的文件有两种去处如果它被修改会变为Modified如果使用“git rm”命令移出版本库则成为Untracked文件。③Modified: 文件已修改但仅仅是修改并没有进行其它的操作这个文件也有两个去处使用“git add”命令可使其进入暂存staged状态使用“git checkout”命令则丢弃修改痕迹返回到unmodify状态。④Staged: 暂存状态执行“git commit”可将修改同步到库中这时库中的文件和本地文件又变为一致文件为Unmodify状态执行“git reset HEAD filename”命令则取消暂存文件状态为Modified。2通过命令“git status”可查看当前路径下的文件状态在命令后加上文件名可仅查看指定文件的文件状态。①在路径“D:\gitcode_test”创建全新仓库后再创建文件hello_world.txt接着在Git Bash中查看文件状态会发现文件hello_world.txt处于Untracked状态。②在Git Bash输入命令“git add .”将所有文件同步至库接着在Git Bash中查看文件状态会发现文件hello_world.txt处于待提交状态。③在Git Bash输入命令“git commit -m “提交信息””将暂存区的内容提交至本地仓库接着在Git Bash中查看文件状态会发现无文件待提交。3有些时候用户不想或者不能把某些文件纳入版本控制中比如数据库文件临时文件设计文件等这时需要借助文件忽略技术在主目录下建立“.gitignore”文件此文件有如下规则①文件中的空行没有任何作用井号#相当于当行注释符其后面的内容将会被忽略不包括下一行。②可以使用Linux通配符说明一类名称具有相似性的文件例如星号*代表任意多个字符问号代表一个字符方括号[abc]代表可选字符范围大括号{string1,string2,...}代表可选的字符串等。③如果名称的最前面有一个感叹号!表示例外规则将不被忽略。④如果名称的最前面是一个路径分隔符/表示要忽略的文件在此目录下而子目录中的文件不忽略。⑤如果名称的最后面是一个路径分隔符/表示要忽略的是此目录下该名称的子目录而非文件默认文件或目录都忽略。六、Git分支1、分支理论概述1一般来说程序开发都会有一个主干以及若干个分支所有新的变更需要在分支上进行开发和调试经过若干轮调试后分支稳定不会出现bug或者其它非预期的情况即可将分支上的变更点合并至主干上。2不同分支可能会对同一个地方做不同变更这时合并主线将会发生冲突需根据实际情况保留哪个分支上的变更点。2、git分支中常用的指令# 列出所有本地分支 git branch # 列出所有远程分支 git branch -r # 新建一个分支但依然停留在当前分支工作 git branch [branch-name] # 新建一个分支并切换到该分支工作 git checkout -b [branch-name] # 合并指定分支到当前分支 $ git merge [branch-name] # 删除指定分支 $ git branch -d [branch-name] # 删除远程分支 $ git push origin --delete [branch-name] $ git branch -dr [remote/branch]