赞
踩
文件的版本管理的问题
版本控制软件
使用版本控制软件的好处
版本控制系统的分类
特点:基于服务器、客户端的运行模式
服务器保存文件的所有更新版本
客户端是服务器的完整备份,并不是只保留文件的最新版本
优点:
Git概念
Git特性
Git之所以快速和高效,主要依赖于它的如下两个特性:
传统的版本控制系统(例如SVN)是基于差异的版本控制,它们存储的是一组基本文件和每个文件随时间逐步累积的差异
好处:节省磁盘空间
缺点:耗时、效率低、在每次切换版本的时候,都需要在基本文件的基础上,应用每个差异,从而生成目标版本对应的文件
Git快照是在原有文件版本的基础上重新生成一份新的文件,类似于备份。为了效率,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件
缺点:占用磁盘空间较大
优点:版本切换时非常快,因为每个版本都是完整的文件快照,切换版本时直接恢复目标版本的快照即可
特点:空间换时间
在Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息
特性:
Git中的三个区域
Git中的三种状态
基本的Git工作流程
下载并安装
配置用户信息
git config --global user.name "xxxx"
git config --global user.email "xxxxxxxx"
注意:如果使用了–global选项,那么该命令只需要运行一次,即可永久生效
通过git config --global user.name和git config --global user.email配置的用户名和邮箱地址,会被写入到C:/Users/用户名文件夹/.gitconfig文件中
检查配置信息
# 查看所有的全局配置项
git config --list --global
# 查看指定的全局配置项
git config user.name
git config user.email
获取帮助信息
# 打开git config 命令的帮助手册
git help config
# 想要获取git config命令的快速参考
git config -h
获取Git仓库的两种方式
在现有目录中初始化仓库
工作区文件的4种状态
检查文件的状态
在状态报告中可以看到新建的index.html文件出现在Untracked files(未跟踪的文件)下面
未跟踪的文件意味着Git在之前的快照(提交)中没有这些文件;Git不会自动将之纳入跟踪范围除非明确地告诉它“我需要使用Git 跟踪管理该文件”
使用git status输出的状态报告很详细,但有些繁琐。如果希望以精简的方式显示文件的状态,可以使用如下两条完全等价的命令,其中-s是–short的简写形式:
# 以精简的方式显示文件状态
git status -s
git status --short
跟踪新文件
git add xxx(文件名)
提交更新
git commit -m "新建了index.html文件"
对已提交的文件进行修改
暂存已修改的文件
提交已暂存的文件
撤销对文件的修改
向暂存区中一次性添加多个文件
git add .
取消暂存的文件
git reset HEAD 要移除的文件名
# 批量移除
git reset HEAD .
跳过使用暂存区域
git commit -a -m "描述信息"
移除文件
# 从Git仓库和工作区中同时移除index.js 文件
git rm -f index.js
# 只从 Git仓库中移除index.css,但保留工作区中的 index.css文件
git rm --cached index.css
忽略文件
一般我们总会有些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表。在这种情况下,我们可以创建一个名为**.gitignore**的配置文件,列出要忽略的文件的匹配模式。
文件.gitignore的格式规范如下:
所谓的 glob模式是指简化了的正则表达式:
# 忽略了所有的 .a文件
*.a
# 跟踪所有的lib.a,即便你在前面忽略了.a文件
!lab.a
# 只忽略当前目录下的TODO文件,而不忽略subdir/TODO
/TODO
# 忽略任何目录下名为build的文件夹
build/
# 忽略任何目录下名为build的文件夹
doc/*. txt
# 忽略doc/目录及其所有子目录下的.pdf文件
doc/**/*.pdf
查看提交历史
# 按时间先后顺序列出所有的提交历史
git log
# 只展示最新的两条提交历史,数字可以按需进行填写
git log -2
# 在一行上展示最近两条提交历史的信息
git log -2 --pretty=oneline
# 在一行上展示最近两条提交历史的信息,并自定义输出的格式
# %h 提交的简写哈希值 %an 作者名字 %ar 作者修订日期,按多久以前的方式显示 %s 提交说明
git log -2 --pretty=format:"%h | %an | %ar | %s"
回退到指定版本
# 在一行上展示所有的提交历史
git log --pretty=oneline
# 使用git reset --hard命令,根据指定的提交ID回退到指定版本
git reset --hard< CommitID >
# 在旧版本中使用git relog --pretty=online命令,查看命令操作的历史
git relog --pretty=oneline
# 再次根据最新的提交ID,跳转到最新的版本
git reset --hard< CommitID >
开源是指不仅提供程序还提供程序的源代码;闭源是只提供程序,不提供源代码
开源并不意味着完全没有限制,为了限制使用者的使用范围和保护作者的权利,每个开源项目都应该遵守开源许可协议( Open Source License )
BSD (Berkeley Software Distribution)
Apache Licence 2.0
GPL (GNU General Public License)
具有传染性的一种开源协议,不允许修改后和衍生的代码做为闭源的商业软件发布和销售
使用GPL的最著名的软件项目是:Linux
LGPL (GNU Lesser General Public License)
MIT(Massachusetts Institute of Technology, MIT)
开源给使用者更多的控制权;开源让学习变得容易;开源才有真正的安全(我为人人,人人为我)
专门用于免费存放开源项目源代码的网站,叫做开源项目托管平台。目前世界上比较出名的开源项目托管平台主要有以下3个:
Github(Github≠Git)是全球最大的开源项目托管平台。因为只支持Git作为唯一的版本控制工具,故名GitHub。在Github中,你可以:
SSH key的作用:实现本地仓库和Github之间免登录的加密数据传输
SSH key的好处:免登录身份认证、数据加密传输
SSH key由两部分组成,分别是:
git clone 远程仓库的地址
分支的概念
master(main)主分支
功能分支
查看分支列表
git branch
创建新分支
git branch 分支名称
切换分支
git checkout 分支名称
分支的快速创建和切换
# -b 表示创建一个新分支
# checkout表示切换到刚才新建的分支上
git checkout -b 分支名称
分支合并
# 1.切换到main分支
git checkout main
# 2.在main分支上运行git merge命令,将login分支的代码合并到main分支
git merge login
删除分支
git branch -d 分支名称
遇到冲突时的分支合并
# 假设:在把reg分支合并到main分支期间,代码发生了冲突
git checkout main
git merge reg
# 打开包含冲突的文件,手动解决冲突之后(vscode智能解决),再执行下列命令
git add .
git commit -m "解决了分支合并冲突的问题"
将本地分支推送到远程仓库
# -u表示把本地分支和远程分支进行关联,只在第一次推送的时候需要带-u 参数
git push -u 远程仓库的别名 本地分支名称:远程分支名称
# 实际案例:
git push -u origin payment: pay
# 如果希望远程分支的名称和本地分支名称保持一致,可以对命令进行简化:
git push -u origin payment
查看远程仓库中所有的分支列表
git remote show 远程仓库名称
跟踪分支
# 从远程仓库中,把对应的远程分支下载到本地仓库,保持本地分支和远程分支名称相同
git checkout 远程分支的名称
# 示例:
git checkout pay
# 从远程仓库中,把对应的远程分支下载到本地仓库,并把下载的本地分支进行重命名
git checkout -b 本地分支名称 远程仓库名称/远程分支名称
# 示例:
git checkout -b payment origin/pay
拉取远程分支的最新的代码
# 从远程仓库,拉取当前分支最新的代码,保持当前分支的代码和远程分支代码一致
git pull
删除远程分支
# 删除远程仓库中,指定名称的远程分支
git push 远程仓库名称 --delete 远程分支名称
# 示例:
git push origin --delete pay
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。