分布式版本控制系统
1.Git,GitHub,GitLab的区别
Git是一个开源的分布式版本控制系统,用于敏捷高效第处理任何或小或大的项目。是Linus Torvalds 为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
Github是在线的基于Git的代码托管服务。GitHub是2008年由Ruby on Rails编写而成。
GitHub同时提供付费账户和免费账户。这两种账户都可以创建公开的代码仓库,只有付费账户可以创建私有的代码仓库。Gitlab解决了这个问题,可以在上面创建免费的私人repo。
2.Git与SVN区别
GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。
如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征。
2.1 Git与SVN区别
- 1.GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
- 2.GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
- 3.GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
- 4.GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
- 5.GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA—1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
3 部署Git服务
创建git仓库
git-server上的操作:
[rooteqfedu.com-]#yum install gitgit-core gitweb-y
[rooteqfedu.com~]#useraddgit
[rooteqfedu. com -] passwd git
[rooteqfedu. com -] mkdir /git-root/
[rooteqfedu. com -] cd /git-root/
[rooteqfedu. com git-root]# git init --bare shell.git ##shell名字可以改
Initialized empty Git repository in /git-root/shell.git/
注意:
git init 和 git init --bare 的区别:
使用——bare选项时,不再生成.git目录,而是只生成.git目录下面的版本历史记录文件,这些版本历史记录文件也不再存放在.git目录下面,而是直接存放在版本库的根目录下面.
用“git init”初始化的版本库用户也可以在该目录下执行所有git方面的操作。但别的用户在将更新push上来的时候容易出现冲突。
使用“git init——bare”方法创建一个所谓的裸仓库,之所以叫裸仓库是因为这个仓库只保存git历史提交的版本信息,而不允许用户在上面进行各种git操作,如果你硬要操作的话,只会得到下面的错误("This operation must be run in a work tree")这个就是最好把 远端仓库初始化成bare仓库的原因
[rooteqfedu com git-root]# chown -R git: git shell.git
[rooteqfedu. com git-root]# su -git
[giteqfedu. com -] ssh-keygen -t rsa
[giteqfedu. com -]s cd .ssh/
[giteqfedu. com ssh]s cp id_rsa. pub authorized_keys
[giteqfedu. com ssh]s vim authorized_key
[giteqfedu. com ssh]$ logout
git仓库测试
git-client上的操作
[rooteqfedu.com~]#ssh-keygen
[rooteqfedu.com-]#ssh-copy-id git@192.168.1.178
[rooteqfedu.com-]#gitclone git@192.168.1.102:/git-root/shell.git
[rooteqfedu. com ~] 1s
rh shell
[rooteqfedu com -] cd shell/
[root@qfedu.comshell]#vimtest.sh
[rooteqfedu. com shell]# git add test.sh
[rooteqfedu com shell]# git config --global user.email "youeexample. com"
[rooteqfedu. com shell]# git config --global user. name "Your Name"
[rooteqfedu com shell]# git commit -m 'first commit'
[master (root-commit) 33c5fbf] first commit
1 file changed, 2 insertions(+)
create mode 100644 test1.sh
[rooteqfedu. com shell]# git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 230 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.1.178:/git-root/shell.git
* [new branch] master - master
4. Git工作流程
一般工作流程如下:
- ·克隆Git资源作为工作目录。
- ·在克隆的资源上添加或修改文件。
- ·如果其他人修改了,你可以更新资源。
- ·在提交前查看修改。
- ·提交修改。
- ·在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
Git的工作流程示意图:
5. git基本概念
- .工作区:就是你在电脑里能看到的目录。
- .暂存区:英文 0 月 stage ,或 1 ndex 。一般存放在” git 目录” ' T 的 index 文件( . gitlindex )中,所以我们把暂存区有时也叫作索引( index )。
- · 版本库:工作区有一个隐藏目录. git ,这个不算工作区,而是 Git 的版本库。工作区、版本库中的暂存区和版本库之间的关系的示怠图:
- 。图中左侧为工作区,右侧为版本库.在版本库中标记为” index ”的区域是暂存区( stage , indeX 标记为” , master " ,的是 master 分支所代表的目录树。
- .图中我们可以看出此时””日 〔 AO ”实际是指向 master 分支的一个””游标”。所以图示的命令中出现日 〔 AO 的地方可以用 master 来替换。
- · 图中的。 bjects 标识的区域为 Git 的对象库,实际位于’ " . 91 口。 bjects ”目录下,里面包含了创建的各种对象及内容。
- · 当对工作区修改(或新增)的文件执行” t add ”命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的旧被记录在暂存区的文件索引中。
- · 当执行提交操作( git commit )时,暂存区的目录树写到版本斑(对象库)中, master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
- · 当执行” . git reset H EAD ' ”命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
- · 当执行” , gi t rm 一 cached < file > ”命令时,会直接从暂存区删除文件,工作区则不做出改变。
- · 当执行” , gi t checkout . " ’或者” t checkout 一; file > " ’命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
- .当执行” " git checkout HEAD . ' ”或者” ' git checkout HEAD < file > ”命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
6 git客户端安装使用
6.1 Git安装配置
6.2 git配置
6.2.1 Git用户信息
6.2.2 文本编辑器
6.2.3 差异分析工具
6.2.4 查看配置信息
6.3 Git使用
6.3.1 ssh链接
6.3.2 http链接
4、 冲突解决
7 Gitlab Server 部署
1、环境配置
关闭防火墙、SELinux
开启邮件服务
用户生成公钥
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?