Git——分布式版本控制系统

简介

Git是一个开源的分布式版本控制系统,可以高效的处理从小到很大的项目版本管理。

分类

  • 集中式

SVN,CVS

使用单一的服务器用来管理和存储所有文件的修订版本;协同开发的成员拉取或提交都需连接到这台服务器;如果服务器宕机,宕机期间任何人都不能拉取或提交,无法做到协同;如果服务器磁盘损坏,又没有备份,将丢失所有文件的修订历史,文件仅剩下成员在各自电脑中的当前版本。

  • 分布式

Git

解决集中式缺点,客户端不仅是下载最新文件,而是把代码仓库完整的镜像了,包括历史修订记录。任何一个故障的协同服务器都可以使用镜像出来的本地仓库恢复。

Git是系统;GitHub是社区

GitHub

准备一个Github账号

#安装Git
[root@wenzi ~]#yum -y install git
#配置秘钥
[root@wenzi ~]#ssh-keygen -t rsa -C 'GitHub邮箱'
#查看秘钥,将公钥复制到GitHub中
[root@wenzi ~]#ll .ssh/
total 8
-rw------- 1 root root 2602 Jun 19 23:02 id_rsa
-rw-r--r-- 1 root root  573 Jun 19 23:02 id_rsa.pub
[root@wenzi ~]#cat .ssh/id_rsa.pub

克隆GitHub已有仓库

GitHub

本地

#配置git环境
[root@wenzi ~]#git config --global user.name 'GitHub用户名'
[root@wenzi ~]#git config --global user.email 'GitHub邮箱'
#查看git配置
[root@wenzi ~]#cat .gitconfig
#设置远程仓库地址
[root@wenzi ~]#git remote add origin git@github.com:wenzi0729/first.git
[root@wenzi ~]#ll
total 4
-rw-------. 1 root root 1279 May 15 02:35 anaconda-ks.cfg
#克隆远程仓库
[root@wenzi ~]#git clone git@github.com:wenzi0729/first.git
Cloning into 'first'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (6/6), done.
[root@wenzi ~]#ll
total 4
-rw-------. 1 root root 1279 May 15 02:35 anaconda-ks.cfg
drwxr-xr-x  3 root root   35 Jun 19 23:30 first
[root@wenzi ~]#cat first/README.md 
This is created file in GitHub
[root@wenzi ~]#cd first/
#在本地修改仓库文件
[root@wenzi first]#echo 'local local local' >> README.md 
#提交当前目录下所有文件到缓存区
[root@wenzi first]#git add .
#提交到本地仓库
[root@wenzi first]#git commit -m 'This is local created file'
[main b07feb5] This is local created file
 1 file changed, 1 insertion(+)
#提交到远程仓库
[root@wenzi first]#git push origin main
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 287 bytes | 287.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:wenzi0729/first.git
   759f39c..b07feb5  main -> main

验证 

本地新建仓库上传至GitHub

GitHub需要新建一个空仓库second

#创建新仓库专用目录
[root@wenzi ~]#mkdir second;cd second
#使该目录称为git管理仓库
[root@wenzi second]#git init
设定环境
[root@wenzi second]#git config --global user.name 'wenzi'
[root@wenzi second]#git config --global user.email 'xxxxxxxx@163.com'
[root@wenzi second]#git remote add origin git@github.com:wenzi0729/second.git
#创建新文件
[root@wenzi second]#echo '123123123' > 123.txt
#将git本地的分支名改为main
[root@wenzi second]#git branch -m master main
#因为GitHub中second是新建的仓库,指定默认使用main分支
[root@wenzi second]#git pull --rebase origin main
[root@wenzi second]#git push origin main

验证 

踩坑:

一、上传到远程仓库时报错

[root@wenzi second]#git push origin main
error: src refspec main does not match any
error: failed to push some refs to 'github.com:wenzi0729/second.git'

2020年10月起,仓库默认分支从master变为main,需要将本地和远程仓库同步

git branch -m master main

二、当GitHub中新建仓库,git第一次上传时报错

[root@wenzi second]#git push origin main
To github.com:wenzi0729/second.git
 ! [rejected]        main -> main (fetch first)
error: failed to push some refs to 'github.com:wenzi0729/second.git

除了将本地仓库和远程仓库关联外,还需要关联分支

git pull --rebase origin main

GitLab

不支持的 Linux 发行版和类 Unix 操作系统

  • Arch Linux
  • Fedora
  • FreeBSD
  • Gentoo
  • macOS

安装配置

官方文档:GitLab下载安装_GitLab最新中文免费版下载安装-极狐GitLab

gitlab配置文件:/etc/gitlab/gitlab.rb

Gitlab相关命令:

  • 重新加载配置文件:gitlab-ctl reconfigure
  • 重启:gitlab-ctl restart
  • 查看服务状态:gitlab-ctl status
  • 查看所有日志:gitlab-ctl tail
  • 检查gitlab:gitlab-rake gitlab:check SANITIZE=true --trace

一、

[root@wenzi ~]#yum install -y curl policycoreutils openssh-server openssh-clients
[root@wenzi ~]#yum -y install postfix
[root@wenzi ~]#systemctl enable --now postfix.service
[root@wenzi ~]#curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash
[root@wenzi ~]#EXTERNAL_URL="http://192.168.29.141:8080" yum install -y gitlab-jh

安装完访问 http://192.168.29.141:8080 ,网页提示502,查看日志 gitlab-ctl tail | grep error、gitlab-ctl tail | grep 8080

发现报错:

{"correlation_id":"","duration_ms":0,"error":"badgateway: failed to receive response: dial unix /var/opt/gitlab/gitlab-rails/sockets/gitlab.socket: connect: connection refused","level":"error","method":"GET","msg":"","time":"2023-06-22T02:02:08+08:00","uri":""}

2023-06-21_18:04:16.06570 /opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/puma-5.6.5/lib/puma/binder.rb:341:in `initialize': Address already in use - bind(2) for "127.0.0.1" port 8080 (Errno::EADDRINUSE)

原因1:puma端口冲突

解决办法:vim /etc/gitlab/gitlab.rb ,在默认端口# puma['port'] = 8080下新增一行 puma['port'] = 8989 ,此端口不能和external_url重复。修改完毕保存,重新加载配置文件,重启gitlab,等待两三分钟再次访问http://192.168.29.141:8080即可

原因2:使用虚拟机的话,内存不够也会出现502,要给gitlab足够的内存可用,个人感觉内存4G以上,或者配置交换分区。

除非您在安装过程中指定了自定义密码,否则将随机生成一个密码并存储在 /etc/gitlab/initial_root_password 文件中(出于安全原因,24 小时后,此文件会被第一次 gitlab-ctl reconfigure 自动删除,因此若使用随机密码登录,建议安装成功初始登录成功之后,立即修改初始密码)。使用此密码和用户名 root 登录。

二、

访问http://192.168.29.141:8080,创建新项目

配置ssh秘钥,查看id_rsa.pub,将公钥复制到gitlab中

[root@wenzi ~]#ssh-keygen
[root@wenzi ~]#ll .ssh/
total 8
-rw------- 1 root root 2610 Jun 22 02:40 id_rsa
-rw-r--r-- 1 root root  576 Jun 22 02:40 id_rsa.pub

查看客户端访问项目地址

三、 

[root@wenzi ~]#git config --global user.name "root"
[root@wenzi ~]#git config --global user.email "git@192.168.29.141"
[root@wenzi ~]#git clone git@192.168.29.141:root/myceshi.git
[root@wenzi ~]#cd myceshi/
[root@wenzi myceshi]#touch local.txt
[root@wenzi myceshi]#git add local.txt
[root@wenzi myceshi]#git commit -m "This is local"
[root@wenzi myceshi]#git push origin main

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Git介绍及基本概念 1. 分布式版本控制系统 Git是一个分布式版本控制系统,每个本地保留远程仓库的完整副本,在本地可以进行任何版本控制操作,比如修改,提交,创建分支,合并分支,回退等。需要时才推送到远程仓库。 2. Git文件保存 Git对每次提交,有变化的文件都会整个文件存储起来,而不是像其它版本控制系统,比如cvs,svn,perforce等存储的是文件的差异部分。但是git有package机制,适当的时候会自动运行git gc命令(也可以手动运行)对文件进行差异存储。当然为了节约空间,也会进行压缩。这种方式在分支方面会带来很大的好处,Git的分支,其实本质上仅仅是指向提交对象的可变指针。 3. Git对数据的引用 Git中所有数据,包括提交,目录,文件等,在存储前都计算校验和,然后以校验和来引用,这个校验和相当于指针。Git用以计算校验和的机制叫做 SHA-1 散列(hash,哈希),这是一个由 40 个十六进制字符(0-9 和 a-f)组成字符串。 SHA-1 哈希看起来是这样:24b9da6552252987aa493b52f8696cd6d3b00373。 4. Git对象 Git有4种对象,blob对象(通常是文件),树(tree)对象(通常是目录),提交(commit)对象和标签(tag)对象。当使用 git commit 进行提交操作时,Git会先计算每一个文件的校验和,在Git仓库中保存为blob对象,然后计算每一个子目录的校验和,保存为树对象,随后,Git便会创建一个提交对象,它包含提交信息(比如提交者名字,邮件,提交时间等),指向这个树对象(项目根目录)的指针和父提交对象(第一次提交无父提交对象)。如此一来,Git 就可以追踪任何对象。标签对象实际上是一个加了标签信息的提交对象,它像是一个永不移动的分支引用——永远指向同一个提交对象,只不过给这个提交对象加上一个更友好的名字罢了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值