标签:文件 git 版本控制 入门教程 就够 仓库 Git 版本
Git入门(基础入坟,一篇就够)
开篇之前 先感谢 伟大的狂神大大!!!
师从狂神
学无止境 每天学一点 每天收获一点
学习git之前,我们需要先明白一个概念,版本控制!
版本控制
什么是版本控制
版本控制(Revision control)是一种在开发过程当中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
- 实现跨区域多人协同开发
- 追踪和记载一个或者多个文件的历史记录
- 组织和保护你的源代码和文档
- 统计工作量
- 并行开发、提高开发效率
- 追踪记录整个软件的开发过程
- 减轻开发人员的负担,节省时间,同时降低人为错误
简单来说就是用于管理多人协同开发项目的技术。
多人开发就必须要使用 版本控制,否则代价会比较大。
常见的版本控制工具
主流版本控制器如下:
- Git
- SVN (Subversion)
- CVS(Concurrent Versions System)
版本控制分类
1、本地版本控制
记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如RCS。
2、集中版本控制 SVN
所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或者上传自己的修改。
所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不联网的话,用户就看不到历史版本,也无法切换版本验证问题。而且所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。
3、分布式版本控制 Git
所有的版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需要在联网的时候push到相应的服务器或者其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有数据,但是这增加了本地存储空间的占用。
不会因为服务器损坏或者网络问题而造成不能工作的情况。
Git与SVN最主要的区别
Git与SVN区别
SVN是集中式版本控制
系统,版本库是集中放在中央服务器
的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本
,然后工作,完成工作后,需要把自己做完的项目推送到中央服务器
。集中式版本控制系统是必须联网
才能工作,对网络带宽要求比较高。
Git是分布式版本控制系统
,没有中央服务器,每个人的电脑就是一个完整的版本库
,工作的时候就不需要联网了,因为版本都在自己电脑上,协同的办法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了A,这时,只需要把各自修改推送给对方
,就可以互相看到对方的修改了。
Git是目前世界上最先进的分布式版本控制系统。
聊聊Git历史
Git最初是由Linux开发者Linus用了仅仅两周时间纯C语言编写而成
,在编写完成之后就立马上手接管Linux源代码,不过在此之前Linux是由BitMover公司开发的BitKeeper分布式版本控制系统所管理源代码,它是商业收费的分布式版本控制器,但BitMover公司看中Linux开源精神,免费授权给Linux社区使用,在2002年时,Linux开始使用BitKeeper分布式版本控制系统管理源代码,但好景不长,有一天Linux社区成员Andrew(samba(局域网共享文件c/s程序)的作者)试图破解BitKeeper共享给所有人使用,被BitMover公司发现并收回了免费使用的版权
,随后Linus就用了两周时间开发出了git(两周时间包括测试),也就是目前为止最好用的分布式版本控制系统。
大名鼎鼎的github用的就是git系统来管理它们的网站,这里需要区分一下,github和git是两个东西,github是一个社区,git是一个服务系统,github只支持git分布式系统,所以故名成为github。
Git环境配置
Git配置
查看配置
git config -l
# 除了系统配置以外的配置
user.name=alascanfu
user.email=3201256097@qq.com
git config --global --list
user.name=alascanfu
user.email=3201256097@qq.com
# 查看系统的配置
$ git config --system --list
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=F:/Git/mingw64/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=true
pull.rebase=false
credential.helper=manager
Git的相关配置文件
- 文件位置:Git\etc\gitconfig:Git安装目录下的gitconfig --system 系统级
[diff "astextplain"]
textconv = astextplain
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[http]
sslBackend = openssl
sslCAInfo = F:/Git/mingw64/ssl/certs/ca-bundle.crt
[core]
autocrlf = true
fscache = true
symlinks = true
[pull]
rebase = false
[credential]
helper = manager
- 用户的相关配置存放于C:\Users\用户名\gitconfig 只适用于当前登录用户的配置 --global
Git基本理论 (核心)
工作区域
工作区域
Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository 或 Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如图所示。
-
Workspace:工作区,就是你平时存放项目代码的地方。
-
Index/Stage:暂存区,用于临时存放你的改动,事实上他只是一个文件,保存即将提交到文件列表信息。
-
Repository:仓库区(或者本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本。
ref: refs/heads/master
# 指向的是主分支
- Remote:远程仓库,托管代码的服务器,可以简单地认为是你项目组中的一台电脑用于远程数据交换。
本地的三个区域确切的说应该是git仓库中HEAD中所指向的版本:
工作路径下会有一个隐藏的文件夹:.git
由Index指向的暂存区、以及由HEAD指向的分支
git的工作流程
git的工作流程一般是这样的:
1、在工作目录中添加、修改文件;git add files
2、将需要进行版本管理的文件放入暂存区域;git commit
3、将暂存区域的文件提交到git仓库 git push
因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)
Git项目搭建
创建工作目录与常用指令
工作目录(WorkSpace)一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文。
日常使用只要记住以下6个命令:
本地仓库的搭建
本地仓库的搭建
创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。
1、创建全新的仓库,需要用到Git管理项目的根目录执行:
# 在当前目录新建一个Git代码库
$ git init
2、执行后可以看到,仅仅在项目目录多了一个.git目录,关于版本等的所有信息都在这个目录里面。
克隆远程仓库
克隆远程仓库
1、另一种方式是克隆远程目录,由于是将远程服务器上的仓库完全镜像一份到本地!
# 克隆一个项目和它的整个代码历史(版本信息)
$ git clone [url]
2、去gitee或者github上克隆一个测试!
Git文件操作
文件的4种状态
文件4种状态
版本控制就是对文件的版本控制,要对文件进行修改、提交等操作
,首先就要知道文件当前在什么状态
,要不然可能会提交了现在还不想提交的文件,或者要提交的的文件没提交上。
- 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
.
查看文件状态
查看文件状态
上面说文件有4中状态,通过如下命令可以查看到文件的状态:
# 查看指定文件状态
$ git status [filename]
# 查看所有文件状态
$ git status
# 添加所有文件到暂存区
$ git add .
# 将暂存区的文件,提交到本地仓库中,-m代表的是msg
$ git commit -m
# 例
$ git commit -m "new file hello.txt"
[master (root-commit) 51ba6af] new file hello.txt
1 file changed, 1 insertion(+)
create mode 100644 helloWorld.txt
# 当将暂存区的文件进行提交到本地仓库之后,再去看文件状态时
# 会提示当前没有文件需要提交
$ git status
On branch master
nothing to commit, working tree clean
忽略文件
忽略文件
前端的项目 中的 npm_moudles
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等。
在主目录下建立“.gitignore”文件,此文件有如下规则:
- 忽略文件中的空行或以#号(#)开始的行将会被忽略。
- 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个符号,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。
- 如果名称的最前面有一个感叹号(!),表示例外规则,将不会忽略。
- 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
- 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
一般项目中的忽略文件
# 为注释
*.txt #忽略所有 .txt结尾的文件
!lib.txt #但lib.txt文件除外
/temp #仅忽略项目根目录下的temp文件,不包括其他目录temp
build/ #忽略build/目录下的所有文件
doc/*.txt #忽略doc/test.txt ,但是不会忽略 doc/server/arch.txt 文件
使用码云/GitHub
github 是有墙的,比较慢,在国内的话,我们一般使用gitee,在公司中有时候会搭建自己的gitlab服务器
1、注册登录gitee、完善个人信息。
2、设置本机绑定SSH公钥,实现免密码登录!
# 进入 C:\Users\用户名\.ssh 目录
# 生成公钥
ssh-keygen
(免密码登录,这一步挺重要的,码云就是远程仓库,我们平时工作在本地)
首先进入到对应的目录当中,Git bash Here
$ ssh-keygen -t rsa
# 生成密钥并且采用rsa算法
3、将公钥信息public key 添加到gitee账户中就可以了
4、使用gitee创建一个自己的仓库!
IDEA中集成Git
1、新建项目,绑定git。
将我们远程克隆下来的目录拷贝到项目当中,就可以了。
2、修改文件,使用IDEA操作git
3、提交测试
说明Git分支
分支在Git中相对比较难,分支就是科幻电影里面的平行宇宙互不干扰,那对现在的你也没有什么影响。不过,在某个时间点,两个平行宇宙合并了,我们就需要处理一些问题。
# 查看当前所有分支
$ git branch
# 查看当前远程服务器所有分支 -r代表远程
$ git branch -r
# 创建一个分支dev
$ 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/delete]
多个分支如果并行执行,就会导致我们代码不冲突,也就是同时存在多个版本!
如果同一个文件在合并分支时都被修改了则会引起冲突:解决的办法是我们可以修改冲突文件后 重新提交!
选择保留代码。
master主分支应该非常的稳定,用来发布新版本,一般情况下不允许在上面工作,工作一般情况下在新建的dev分支上工作,工作完成后,比如要发布,或者说dev分支代码稳定后可以合并到主分支master上来。
感谢
感谢狂神大大的视频 学习永无止境、每天多一点 、收获就多一点
本文为作者跟学笔记 如有收获 也记得三连哦~
标签:文件,git,版本控制,入门教程,就够,仓库,Git,版本 来源: https://blog.csdn.net/fuijiawei/article/details/122004600
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。