git
版本控制简介
主流的互联网项目中都会涉及项目的资源管理,如代码资源、文档资源等。所以,就需要使用SCM(Software Configuration Management)软件配置管理来进行版本控制、变更控制的规程,对软件开发项目工作成功的保护。
在实际开发中包含了许多的SCM软件,如VSS、CVS、SVN等软件,但这些软件需要中央服务器来对项目进行存储和管理,数据安全性较差;而Git是一种分布式的版本控制,适合全方位工程大小的管理,数据安全性也较高。
版本
- 软件版本:软件的发布者指定的版本,如JDK1.8、MySql5.7
- 文件版本:在文件的名称上加标记,以区分文件,目的是为了记录每一次重要操作前的原本,使得可以从这些重要的历史记录中恢复
版本控制软件
- 保存和管理文件,自动记录文件版本
- 提供访问使用的客户端,使得用户使用客户端工具访问,而不直接操作文件
- 提供不同版本文件的比对功能
集中式版本控制
- 提供统一的资源存储和管理,存放在中央服务器
- 提供向用户本地的文件下载和用户向中央服务器的文件上传
- (VSS)可能存在多用户上传文件导致文件冲突和多用户协同操作导致的文件不一致问题;解决方法是对文件加写锁,加锁期间其他用户禁止写文件,可以读文件,释放锁后需要修改则必须重新获取最新版本的文件。
- (CVS、SVN)允许多用户同时修改文件,但只允许不同用户修改文件中不同位置的操作,提交后比后合并成新的文件;但如果同时修改一个位置,则仍然有冲突
- 如果中央服务器发生故障,就无法访问项目文件
分布式版本控制
- 任然提供一个中央服务器存储资源,但允许用户复制一份资源到本地
- 用户修改时,在本地仓库进行操作;即使中央服务器失效,仍然可以在本地进行操作
- 网络流量较小,不需要严格同步每一次文件操作,而是通过提交来控制版本
git基础原理
- 在本地仓库下,创建和修改文件都会自动识别到,实际存储在仓库中的文件是在.git目录下的
- 在仓库路径下和.git文件夹下对应的文件会进行比对,如果检测到不同,就会提示有新的修改;而进行提交后,就改变了.git中的文件,此时git和项目中的文件相同
- 可以在History中查看版本,版本号是一个16进制的数字,可以通过版本号找到历史文件
- 在多用户操作同一个项目时,仓库可以通过分支的方式来使用文件记录不同分支指向的提交信息和对应的文件,以供不同的开发人员修改,在最终只需要合并分支就可以了;这样可以减少版本提交记录混乱、文件修改冲突等风险;
- 通过合并不同分支到主分支,就可以实现多人协作开发
- 如果出现文件冲突,需要人为在编辑器中修改对应的代码才能解决问题
- 如果需要描述提交,可以在提交处添加tag
- 文件的比对功能会显示文件修改的内容,一般使用减号代表旧文件,加号代表新文件,跟随的数字显示修改的位置
- 关联到远程仓库后,所有的操作都是暂时从本地修改的,需要提交到远程仓库后才能生效;远程仓库一般使用github或gitee
README
这是一个用来添加一些关键描述信息的文本文件,通常包括简介、使用方法、注意事项、版本更新内容等
.gitignore
有些文件类型是不支持比对功能或不需要进行比对,所以可以设置不需要对这些文件进行修改的比对操作;这样的设置可以设置具体的文件名称或通过通配符忽略全部后缀名的文件
版本号
每次的提交,都会产生一个版本号,这个版本号是根据提交内容,使用SHA-1算法产生的;版本号相对于每个库,也就是说多个库可能存在相同的版本号,而git可以在合并时将版本号进行合并(SHA-1是16进制且有40位,较难产生冲突);
同时,版本号也可以定位文件,版本号中前两位是文件夹,而后38位是文件名;但git在一次提交中会有很多版本号,需要以此查找才能找到最终文件;
- 提交信息的版本号指向的文件中tree也是版本号,指向了文件状态文件
- 如果包含parent,则指的是上一次提交文件的版本号
- 文件状态文件中的blob也是版本号,指向了最终的文件内容
- 如果包含多个blob则表示存在多个文件
简单来说,提交信息文件包括了上次提交的信息文件和当前文件状态的文件,当前文件状态的文件存储了当前文件内容的文件;注意,所有修改都不会覆盖原文件,而是新建了一个文件,如果文件内容相同则会指向同一个文件,不论修改过程;
HEAD
该文件位于工作区域,文件指向heads中的文件,其中的文件是分支文件,这些分支文件指向的是提交信息文件中的最新提交;head文件指向的分支文件是当前所使用的分支,不同的分支可以指向相同的提交文件
git命令
-
查看git的版本
git -v -
创建一个仓库
-
创建一个本地仓库,创建在当前目录下
git init命令行创建的git项目不会有.gitattributs,HEAD文件也不会指向任何分支
-
远程克隆一个仓库,并且重命名
git clone https://github.com/redis/redis.git localredis
-
-
配置git
-
配置用户的名称和邮件地址,也可以直接在config文件中修改
git config user.name fantank git config user.email 1012_gimal@gmail.com如果需要对git所有仓库配置则需要加上–global参数,全局配置文件在C盘User文件夹下的对应用户文件夹的.gitconfig文件中
git config --global user.name fantank
-
-
获取当前git暂存区的状态
git status可以显示是否和当前分支同步,是否有文件发生了改变,如增删改后都可以通过此查看
-
将工作区的文件添加的暂存区,或者将某个后缀名的文件全部添加到暂存区;修改和增加文件后需要使用该命令
git add filename git add *.filetype将暂存的文件移动到工作区,实际上不需要移动文件,只是修改配置文件中的文件指向
git rm --cached filename -
提交暂存文件,产生一次提交,设置提交名称
git commit -m operationName -
查看提交日志
git log -
恢复删除的文件,可以从存储区域恢复
git restore filename但如果提交了删除文件的版本,就不能再使用上述方法恢复了但是可以直接将仓库恢复到某一个版本;操作时,先查询恢复到提交的版本号;
git log version git reset --hard version但是这样做会丢失操作的过程,如果不希望丢失中间的提交,可以使用revert操作,找到需要恢复的操作的前一条即可;这样可以还原到错误提交之前的版本
git revert version -
分支操作
-
创建一个新的分支,但是仓库中至少要有一次提交
git branch branchName -
切换到一个分支
git checkout branchName也可以将创建分支和切换合并
git checkout -b branchName -
删除一个分支
git branch -d branchName -
合并分支,首先需要查看分支
git branch -v合并前需要切换到主分支
git checkout master合并某一个分支
git merge branchName如果发生冲突,需要自行到冲突文件中查看git添加的注释信息,并且自行修改后保存;保存后在主分支当作普通文件提交即可
git commit conflictFile
-
-
标签操作
-
给提交增加一个别名,使得容易查看
git tag tagName version -
使用tag查看版本
git log tagName
-
-
远程仓库
-
关联远程仓库
git remote add remoteName sshOrHttpsAddress -
提交到远程仓库
git push remoteName -
如果使用SSH连接,需要提供安全认证
ssh-keygen -t rsa -C sshAddress该命令会在系统盘用户对应文件夹下生成一个.ssh文件夹,其中有一个文件id_rsa.pub文件,将其中的文件拷贝到gitee或github中,设置一个public key公钥,这样才能使用ssh进行远程推送
-
Git是一种分布式版本控制系统,用于跟踪对文件和软件项目的更改。相较于VSS、CVS、SVN等集中式SCM,Git提供更高的数据安全性。Git的基本操作包括提交、分支、合并,以及与远程仓库的交互。在处理多用户协作和文件冲突时,Git通过分支管理和合并策略有效地管理项目。SSH密钥用于安全的远程仓库连接。
2079

被折叠的 条评论
为什么被折叠?



