Git入门详细教程

Git入门详细教程

一、Git概述

Git入门具体教程

Git官网

Git是一个开源的分布式版别操控系统,用于盯梢文件的改变和协作开发。它答应多个开发者在同一项目中一起作业,并能够有效地办理代码的版别和前史记载。Git能够协助开发团队更好地协作,追寻代码变更,并且能够在需求时轻松地回滚到之前的版别。

1.1 什么是版别操控

版别操控是一种办理文件改变的系统,它能够盯梢文件的修正、增加和删去,并记载这些改变的前史。版别操控系统能够协助团队协作开发,保证每个人都在同一个代码基础上作业,并且能够轻松地检查和康复文件的不同版别。它还能够供给分支和兼并功用,答应多个开发者并行地修正代码,并将这些修正兼并到一个一起的代码库中。版别操控系统能够进步开发效率,减少错误,并且有助于坚持代码库的整齐和可保护性。

1.2 版别操控东西

一些常见的版别操控东西包括:

  1. Git(GPT-3.5)
  2. Subversion(SVN)
  3. Mercurial
  4. Perforce
  5. CVS(Concurrent Versions System)
  6. Bazaar

版别操控东西又分为集中式版别操控东西分布式版别操控东西

集中式版别操控东西

集中化的版别操控系统比方CVS、SVN等,都有一个单一的集中办理的服务器,保存一切文件的修订版别,而协同作业的人们都经过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版别操控系统的规范做法。

这种做法带来了许多好处,每个人都能够在必定程度上看到项目中的其他人正在做些什么。而办理员也能够轻松掌控每个开发者的权限,并且办理一个集中化的版别操控系统,要远比在各个客户端上保护本地数据库来得轻松容易。

事分双面,有好有坏。这么做显而易见的缺点是中心服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同作业

分布式版别操控东西

像Git这种分布式版别操控东西,客户端提取的不是最新版别的文件快照,而是把代码库房完好地镜像下来(本地库)。这样任何一处协同作业用的文件产生故障,事后都能够用其他客户端的本地库房进行康复。由于每个客户端的每一次文件提取操作,实际上都是一次对整个文件库房的完好备份。

分布式的版木操控系统山现之后,解决了集中式版木操控系统的缺点:

  1. 服务器断网的情况下也能够进行开发(由于版别操控是在本地进行的)
  2. 每个客户端保存的也都是整个完好的项目(包含前史记载,更加安全)

1.3 Git简史

Git是由Linus Torvalds于2005年创立的分布式版别操控系统。Git的前史能够追溯到Linux内核开发过程中对版别操控系统的需求。在此之前,Linux内核的开发运用BitKeeper作为版别操控东西,但跟着一些争议的出现,Linux社区需求一个开源的代替方案。

因而,Linus Torvalds开发了Git,并于2005年发布了首个版别。Git的规划目标是速度、数据完好性和分布式架构。它的开展得到了全球开发者社区的广泛支撑,成为了目前最盛行的版别操控系统之一。

Git的开展进程中,不断得到改进和扩展,吸引了全球开发者的参加,形成了一个庞大的生态系统。今日,Git现已成为了许多开源项目和商业项目的首选版别操控东西。

1.4 Git作业机制

Git入门具体教程

作业区指的是存放代码的磁盘方位

1.5 Git和代码保管中心

代码保管中心是基于网络服务器的长途代码库房,一般咱们简略称为长途库。

局域网:

  1. GitLab

互联网:

  1. GitHub
  2. Gitee

二、Git装置

根据自己的电脑挑选合适的Git版别,本机为windows10 64位,基本上无脑下一步装置就行

Git入门具体教程

选Vim就行,Notepad 也行

Git入门具体教程

其它的不必改,直接下一步,然后装置,装置完成后,鼠标右键会有Git

Git入门具体教程

git --version #检查git版别信息

Git入门具体教程

三、Git常用指令

指令名称 效果
git config –global user.name 用户名 设置用户签名
git config –global user.email 邮箱 设置用户签名
git init 初始化本地库
git status 检查本地库状况
git add 文件名 增加到暂存区
git commit -m”日志信息” 文件名 提交到本地库
git reflog 检查前史记载
git reset–hard 版别号 版别号版别穿梭

3.1 设置签名

右键翻开Git Bash输入

git config --global user.name "笑的像个child"
​
git config --global user.email "xxxxx@qq.com(自己的邮箱)"

Git入门具体教程

3.2 初始化本地库

创立一个git-demo文件夹(后面的试验都基于这个文件夹),并右键进入git bash,并输入初始化指令

git init

image-20240116111812790

能够看到当时目录存在.git文件夹(看不到是由于它默认是隐藏的)

Git入门具体教程

3.3 检查本地库状况

git status

Git入门具体教程

新增文件

在git-demo下创立一个hello.txt文件,并在其间写入一行hello git,关闭并保存

再次检查本地库的状况,此刻文件还只存在于作业区,并未增加至暂存区。

Git入门具体教程

3.4 增加暂存区

将文件增加至暂存区,输入指令

git add hello.txt

也能够运用

git add . # .的意思是增加一切文件至暂存区。

增加完成后,再次检查本地库状况

Git入门具体教程

此刻,git现已追寻到了文件,此刻如果你不想保存一个前史版别,是能够删去掉的。

git rm --cached hello.txt #将文件从暂存区删去(此刻还没有记载前史版别,只要commit时才会有前史版别)

Git入门具体教程

此处仅仅做试验,测验删去暂存区的文件,删去后,重新增加至暂存区,为后面的试验做准备

3.5 提交本地库

git commit -m "第一次提交" hello.txt

Git入门具体教程

提交完成后,再次检查本地库状况,暂存区现已没有文件了

检查前史版别信息,

git reflog #检查前史版别
git log #能够检查更具体的提交日志

Git入门具体教程

3.6 修正文件

修正hello.txt中的内容(只在第一行新增了一段字符串),再检查本地库状况,提示文件被修正

Git入门具体教程

追寻修正增加至暂存区

Git入门具体教程

提交本地库,并检查前史版别具体日志

Git入门具体教程

提交文件后,提示一个文件被修正,一行新增,一行删去,是由于git中经过行来保护文件,修正一行,它无法表示,它是把修正之前的那一行删掉,再把修正之后的一行的内容新增进来。

3.7 前史版别

检查前史版别

git reflog #检查版别信息
git log #检查版别具体信息

Git入门具体教程

版别穿梭

穿梭回第一个版别,并检查文件,现已回到第一个版别

git reset --hard "前史版别号"

Git入门具体教程

穿梭回第2次提交的版别

Git入门具体教程

四、Git分支操作

指令名称 效果
git branch 分支名 创立分支
git branch -v 检查分支
git checkout 分支名 切换分支
git merge 分支名 把指定的分支兼并到当时分支上

4.1 分支概述

Git分支是在Git版别操控系统中用于并行开发和办理不同功用或版别的代码的重要概念。分支能够让开发者在不影响主线代码的情况下,独立地进行开发、测验和修正。在Git中,主要的分支是master(或main)分支,它包含了项目的主要代码。除了主分支外,开发者能够创立其他分支,比方feature分支用于开发新功用,bugfix分支用于修正bug,release分支用于发布版别等。

分支的优势在于它能够供给一种安全的方法来进行并行开发,避免了直接在主分支上进行修正可能带来的风险。同时,分支也能够协助团队协作,每个成员能够在自己的分支上进行开发,最终兼并到主分支上。

在Git中,创立、切换、兼并、删去分支都是非常简略的操作,开发者能够根据需求随时创立新的分支,并在不同分支之间切换,以便进行不同的作业。因而,合理地运用分支能够协助开发团队更高效地进行代码办理和开发作业。

Git入门具体教程

4.2 检查分支

git branch -v #检查当时存在的的分支

Git入门具体教程

4.3 创立分支

创立hot-fix分支后,再检查当存在的分支(当时仍是在master分支)

git branch "分支名"

Git入门具体教程

4.4 切换分支

从master分支切换到hot-fix分支上

git checkout hot-fix

Git入门具体教程

分支已从master分支切换到hot-fix分支

4.5 修正分支

当时在hot-fix分支上,修正hello.txt文件,并将其提交本地库

Git入门具体教程

4.6 分支兼并

正常兼并

git merge hot-fix

Git入门具体教程

抵触兼并

抵触产生的原因: 兼并分支时,两个分支在同一个文件的同一个方位有两套完全不同的修正。Git无法替咱们决议运用哪一个。必须人为决议新代码内容

先在master分支下修正文件,然后切换到hot-fix分支下,然后再在同一行修正文件(修正内容能够随意),然后切换回master分支兼并hot-fix分支

Git入门具体教程

检查本地库状况

Git入门具体教程

此刻需求手动兼并代码

检查hello.txt文件

Git入门具体教程

解决抵触

Git入门具体教程

将特殊符号删去,然后保留需求的片段,此处两段同时保留

重新提交文件

Git入门具体教程

此刻commit不能带文件名!!!不能带文件名!!!不能带文件名!!!

五、团队协作

5.1 团队协作机制

团队内协作

Git入门具体教程

简述:A和B是同一团队的成员,A将代码push至代码长途库房,B能够将其clone下来然后修正,再push到长途库房,A就能够pull下B修正的部分代码。

跨团队协作

Git入门具体教程

A和C是同一开源项目的团队成员,B并不是,B觉得A的团队写的代码不够好,然后就fork了一份完好的代码(整个库),然后clone至本地,B将其修正优化后又push到他的长途库房,然后主张pull request,开源团队进行审阅,觉得B写的很好,就将他的代码进行merge,然后开源团队又将自己的代码进行更新。

六、Gitee操作

6.1 推送本地库到长途库

GitHub这两天翻开的实在是太慢了,我梯子又过期了,在此就运用Gitee进行演示了,都大差不差。

进入Gitee的个人主页点击创立

Git入门具体教程

填写库房基本信息,然后创立

Git入门具体教程

设置别号

git remote add "别号" "链接"

Git入门具体教程

推送至长途库房

git push git-test master

Git入门具体教程

在本地修正了文件后仍是先将其提交暂存区,本地库,然后再push一下就能够了

检查gitee库房存在推送的文件

Git入门具体教程

6.2 拉取长途库到本地

此刻长途库的文件内容和本地的是不一致的

Git入门具体教程

在git-demo中翻开git,输入拉取的指令

git pull "长途库房的别号或链接" "分支名"

Git入门具体教程

此刻,本地的hello.txt文件现已更新和长途库的文件内容一致

6.3 克隆长途库到本地库

拉取长途库

Git入门具体教程

先在自己电脑上随意找一个没有文件的方位,然后翻开git

git clone "仿制的链接"

Git入门具体教程

库房,文件都克隆成功

Git入门具体教程

其它的项目都是这样,仿制链接然后clone

七、自建GitLab代码保管平台

Git入门具体教程

GitLab官网

GitLab的前史能够追溯到2011年,当时由荷兰的程序员Sytske Sijbrandij和Dmitriy Zaporozhets一起创立了GitLab。最初,GitLab是作为一个开源项目发布的,旨在供给一个基于Web的Git库房办理东西,以及一系列的协作东西,例如问题盯梢、继续集成和布置等。

跟着时间的推移,GitLab逐渐获得了越来越多的用户和开发者的支撑。2013年,GitLab发布了第一个企业版,为企业用户供给了更多的高档功用和支撑服务。2015年,GitLab发布了自保管版别,运用户能够在自己的服务器上布置和运行GitLab。

GitLab继续不断地进行更新和改进,增加了许多新的功用和东西,如继续集成、继续布置、代码检查等,使其成为一个功用强大的代码办理平台。2017年,GitLab完成了一轮高达2000万美元的融资,进一步加速了其开展。

至今,GitLab现已成为了全球范围内广受欢迎的代码保管和协作东西,拥有庞大的用户群和开发者社区。它的开源版别和企业版都得到了广泛的应用,为软件开发团队供给了全面的解决方案。GitLab的开展进程充沛展现了其不断创新和改进的精神,以及对用户需求的不断关注和满足。

7.1 服务器装置GitLab

GitLab下载装置_GitLab最新中文官网免费版下载-极狐GitLab

本人运用的是一台Centos7的服务器

下载/装置极狐GitLab

curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash

Git入门具体教程

开始装置

EXTERNAL_URL="http://gitlab.example.com" yum install -y gitlab-jh

此处”gitlab.example.com“修正为服务器的地址并指定端口号

主张我们运用内存大一点的服务器,我的现已挂了,后续演示放在下一篇文章

Git入门具体教程

参考资料

01尚硅谷Git课程介绍哔哩哔哩_bilibili