【通俗易懂】git原理、安装及连接gitlab,github

目录

一、GIT原理【这部分也挺简单,可以看看,如果没时间可以直接跳到第二部分】

SVN与Git的的区别

二、安装Git 

 2.1 获取Git安装程序

2.2 Git安装过程

三、Git连接Gitlab

3.1 gitlab准备工作

3.2 本地计算机准备工作及配置git 

 四、Git连接Github


一、GIT原理【这部分也挺简单,可以看看,如果没时间可以直接跳到第二部分】

Git 是一种分布式版本控制系统,用于管理软件项目的源代码。它是由 Linux 之父 Linus Torvalds 开发的,并已经成为了现代软件开发领域中最流行的版本控制系统之一。

使用 Git 可以追踪代码的历史修改记录,方便团队协作、代码共享和代码重构。Git 的基本工作流程如下:

  1. 在开始编写代码之前,首先需要创建一个 Git 仓库(repository),用于存储代码和版本历史记录。
  2. 在编写代码时,可以通过 git add 命令将更改的文件添加到 Git 的暂存区(staging area)中。
  3. 通过 git commit 命令将暂存区中的更改提交到 Git 仓库中,并生成一个新的版本号(commit hash)。
  4. 如果需要撤销某个提交,可以使用 git revert 命令来创建一个新的提交,该提交将会抵消先前的提交效果。
  5. 如果需要合并不同分支的代码,可以使用 git merge 命令进行合并。
  6. 如果需要查看代码的历史提交记录,可以使用 git log 命令来获取详细信息。
  7. 如果需要将代码推送到远程仓库,可以使用 git push 命令将本地代码推送到远程仓库。
  8. 如果需要从远程仓库中获取代码,可以使用 git pull 命令将远程代码拉取到本地。

  • Workspace:工作区
  • Index / Stage:暂存区
  • Repository:仓库区(或本地仓库)
  • Remote:远程仓库

SVN与Git的的区别

SVN和Git都是版本控制系统,但它们有以下区别:

  1. 分布式 vs 集中式:Git 是一种分布式版本控制系统,而 SVN 是一种集中式版本控制系统。在 Git 中,每个开发者都拥有本地代码库的完整副本,可以离线工作并在不同的工作流程之间自由转换。而在 SVN 中,所有开发者共享同一个中央代码库,并且需要有网络连接才能进行版本控制操作。
  2. 分支管理:Git 在分支管理方面比 SVN 更加强大和灵活。Git 的分支非常轻量级,创建和合并分支也很容易,因此可以轻松实现多人协作和并行开发。而在 SVN 中,分支比较重量级(即创建和合并分支需要花费相对更多的时间和资源),因此往往只用于重要的版本分支。
  3. 版本号:Git 使用 SHA-1 哈希值来标识每个提交,而 SVN 采用递增的数字版本号来标识每个提交。SHA-1 哈希值保证了每个提交的唯一性,而递增版本号则简化了版本控制过程。
  4. 整体性:由于 SVN 是一种集中式版本控制系统,因此所有数据都存储在中央代码库中。如果中央代码库损坏或丢失,可能会导致数据丢失或无法恢复。而 Git 是一种分布式版本控制系统,每个开发者都拥有完整的代码库副本,保证了代码的整体性和可靠性。
  5. 性能:Git 比 SVN 更快,特别是在处理大型仓库、分支合并以及比较代码差异时。Git 使用基于内容的哈希算法来检测文件是否修改,而 SVN 则需要检查文件的元数据(如时间戳和文件大小)来确定是否修改。

总之,虽然 SVN 和 Git 都是版本控制系统,但它们的设计和实现方式存在较大差异,开发人员应根据自身需求选择最适合的版本控制系统。

二、安装Git 

 2.1 获取Git安装程序

        到Git官网下载,网站地址:https://git-scm.com/downloads,如下图

  因为我们是用Windows系统上的浏览器访问的,Git官网自动之别到了我使用的操作系统,所以右侧直接显示下载使用Windows系统的最新版本(如果识别错误,可以在中间选择系统),点击即可下载。我下载的是 2.24.0 for Windows,文件名称是“Git-2.24.0.2-64-bit.exe”。下载到电脑上之后,鼠标双击这个文件即可进入安装过程。

2.2 Git安装过程

  双击看到的第一个界面如下图:

01、使用许可声明

  点击“Next”进入下图页面:

02、选择安装路径

  在输入框内输入想要安装到的本机路径,也就是实际文件夹位置,或点击“Browse...”选择已经存在的文件夹,然后点击“Next”按钮继续,进入下图界面:

03、选择安装组件

  上图红框内的选项是默认勾选的,建议不要动。绿色框1是决定是否在桌面创建快捷方式的。绿色框2是决定在所有控制台窗口中使用TrueType字体和是否每天检查Git是否有Windows更新的。这些根据自己需要选择。

  点击“Next”按钮进入下图界面:

04、选择开始菜单页

  这个界面是创建开始菜单中的名称,不需要修改,直接点“Next”按钮继续到下图的界面:

05、选择Git文件默认的编辑器

  这个页面是在选择Git文件默认的编辑器,很少用到,所以默认Vim即可,直接点“Next”按钮继续到下图的界面:

06、调整您的PATH环境

  这个界面是调整您的PATH环境。

  第一种配置是“仅从Git Bash使用Git”。这是最安全的选择,因为您的PATH根本不会被修改。您只能使用 Git Bash 的 Git 命令行工具。但是这将不能通过第三方软件使用。

  第二种配置是“从命令行以及第三方软件进行Git”。该选项被认为是安全的,因为它仅向PATH添加了一些最小的Git包装器,以避免使用可选的Unix工具造成环境混乱。

您将能够从Git Bash,命令提示符和Windows PowerShell以及在PATH中寻找Git的任何第三方软件中使用Git。这也是推荐的选项。

  第三种配置是“从命令提示符使用Git和可选的Unix工具”。警告:这将覆盖Windows工具,如 “ find 和 sort ”。只有在了解其含义后才使用此选项。

  我选择推荐的选项第二种配置,点击“Next”按钮继续到下图的界面:

07、选择HTTPS后端传输

  这个界面是选择HTTPS后端传输。

  第一个选项是“使用 OpenSSL 库”。服务器证书将使用ca-bundle.crt文件进行验证。这也是我们常用的选项。

  第二个选项是“使用本地 Windows 安全通道库”。服务器证书将使用Windows证书存储验证。此选项还允许您使用公司的内部根CA证书,例如通过Active Directory Domain Services 。

  我使用默认选项第一项,点击“Next”按钮继续到下图的界面:

08、配置行尾符号转换

  这个界面是配置行尾符号转换。

  第一个选项是“签出Windows风格,提交Unix风格的行尾”。签出文本文件时,Git会将LF转换为CRLF。提交文本文件时,CRLF将转换为LF。对于跨平台项目,这是Windows上的推荐设置(“ core.autocrlf”设置为“ true”)

  第二个选项是“按原样签出,提交Unix样式的行尾”。签出文本文件时,Git不会执行任何转换。 提交文本文件时,CRLF将转换为LF。对于跨平台项目,这是Unix上的建议设置(“ core.autocrlf”设置为“ input”)

  第三种选项是“按原样签出,按原样提交”。当签出或提交文本文件时,Git不会执行任何转换。不建议跨平台项目选择此选项(“ core.autocrlf”设置为“ false”)

  我选择第一种选项,点击“Next”按钮继续到下图的界面:

09、配置终端模拟器以与Git Bash一起使用

  这个界面是配置终端模拟器以与Git Bash一起使用。

  第一个选项是“使用MinTTY(MSYS2的默认终端)”。Git Bash将使用MinTTY作为终端模拟器,该模拟器具有可调整大小的窗口,非矩形选择和Unicode字体。Windows控制台程序(例如交互式Python)必须通过“ winpty”启动才能在MinTTY中运行。

  第二个选项是“使用Windows的默认控制台窗口”。Git将使用Windows的默认控制台窗口(“cmd.exe”),该窗口可以与Win32控制台程序(如交互式Python或node.js)一起使用,但默认的回滚非常有限,需要配置为使用unicode 字体以正确显示非ASCII字符,并且在Windows 10之前,其窗口不能自由调整大小,并且只允许矩形文本选择。

  我选择默认的第一种选项,点击“Next”按钮继续到下图的界面:

10、配置配置额外的选项

  这个界面是配置配置额外的选项。

  第一个选项是“启用文件系统缓存”。文件系统数据将被批量读取并缓存在内存中用于某些操作(“core.fscache”设置为“true”)。 这提供了显著的性能提升。

  第二个选项是“启用Git凭证管理器”。Windows的Git凭证管理器为Windows提供安全的Git凭证存储,最显着的是对Visual Studio Team Services和GitHub的多因素身份验证支持。 (需要.NET Framework v4.5.1或更高版本)。

  第三个选项是“启用符号链接”。启用符号链接(需要SeCreateSymbolicLink权限)。请注意,现有存储库不受此设置的影响。

  我勾选默认的第一、第二选项,点击“Next”按钮继续到下图的界面:

11、配置实验选项

  这个界面是配置实验选项。

  启用实验性的内置添加 -i / -p。(新!)使用实验性的内置交互式add(“ git add -i”或“ git add -p”)。这使其速度更快(尤其是启动!),但尚未被认为是可靠的。

  默认不勾选,直接点击“Next”按钮继续到下图的安装进度界面:

12、安装进度指示

  安装进度结束之后,会出现下图的完成Git安装向导界面:

13、安装完成

  在这个界面,可以勾选是否启动启动Git Bash和是否查看发行说明,然后点“Finish”按钮退出安装界面。

14、启动测试

  到此,Git的安装完成,可以在开始菜单中看到Git的三个启动图标(Git Bash、Git CMD(Deprecated)、Git GUI)。

Git Bash,是Git配套的一个控制台,点击打开如下图:

Git CMD(Deprecated),是通过CMD使用Git(不推荐使用),点击打开如下图:

Git GUI,是Git的可视化操作工具,点击打开如下图:

 

三、Git连接Gitlab

3.1 gitlab准备工作

1、在GitLab上创建一个账户:如果您还没有GitLab账户,请在GitLab官网(https://gitlab.com/users/sign_in)上创建一个账户。

2、创建一个新的Git仓库:登录到您的GitLab账户,然后在页面上创建一个新的Git仓库。请注意Git仓库的名称和位置,因为这些信息将用于配置本地Git。

3.2 本地计算机准备工作及配置git 

1、在计算机上创建个文件夹(用于专门存/传到gitlab或github代码,例如GitCode),进入文件夹内,右键打开Git Bash终端,并输入以下命令以设置您的Git用户名和电子邮件地址(最好和gitlab用相同的用户名和电子邮件地址,这样方便记。例如我的电子邮件地址是xxx@qq.com)

git config --global user.name "BosserWang"
git config --global user.email "xxxxx@xxx.com"

(BosserWang是用户名,xxxxx@xxx.com是电子邮箱,我的是qq邮箱,大家根据自己的信息自行修改)

 2、生成SSH密钥:输入以下命令以生成SSH密钥:

ssh-keygen -t rsa -C "xxxxx@xxx.com"

 这里的地址和上面的电子邮箱地址是同一个地址。

然后一路回车即可。

 3、添加SSH密钥到GitLab:使用以下命令将SSH密钥添加到GitLab:

cat ~/.ssh/id_rsa.pub

 (~表示用户目录,比如我的windows就是C:\Users\Administrator.DESKTOP,并复制下面红色框内的内容)

4、打开gitlab,把ssh添加进去。

 5、进入计算机上创建的文件夹(我的是GitCode),右键选择->Git Bash Here 通过git init命令把这个目录变成Git可以管理的仓库(多了这么一个文件.git)

git init

 6、克隆项目

git clone 项目地址

 7、提交代码到Gitlab

把代码文件全部copy到刚刚克隆的项目文件夹中,右键选择->Git Bash Here 。

 第一步,用命令git add告诉Git,把文件添加到仓库:

git add 文件名 或者 git add .

(“git add“后加“.”则添加全部文件,也可以加"*.txt"表示添加全部需要提交的txt文件 )

执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。

第二步,用命令git commit告诉Git,把文件提交到仓库:

git commit -m "20231121"

简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

嫌麻烦不想输入-m "xxx"行不行?确实有办法可以这么干,但是强烈不建议你这么干,因为输入说明对自己对别人阅读都很重要。实在不想输入说明的童鞋请自行Google,我不告诉你这个参数。

git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容)。

git commit -m "增加了一张地铁图"

为什么Git添加文件需要addcommit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件。

最后输入以下命令,提交到gitlab

git push origin master 或者 git push 

git push origin master的意思就是上传本地当前分支代码到master分支。git push是上传本地所有分支代码到远程对应的分支上。


若在执行上述操作的时候,如果报错:

On branch master
nothing to commit, working tree clean
To git@gitlab.com:<your_username>/<your_repository>.git! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@gitlab.com:<your_username>/<your_repository>.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.


代表您本地的分支与远程分支的提交历史不一致,所以需要先将远程分支的更改合并到本地分支,然后再将本地更改推送到远程分支。

要解决这个问题,请按照以下步骤操作:

运行以下命令拉取远程分支的更改:

git pull origin master


这将合并远程分支的更改到您本地的分支。

如果在合并过程中出现冲突,请解决冲突并提交更改。

然后再次运行以下命令将更改推送到远程分支:

git push origin master


这样就能够成功地将更改推送到远程分支了。

如果以上还报错,如:

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@gitlab.com:<your_username>/<your_repository>.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.


这个错误提示表明,远程分支比您本地分支更新,因此在推送更改之前,您需要先将远程分支上的更改合并到本地分支中。

为了解决此问题,您可以执行以下操作:

运行以下命令来拉取远程分支的更改:

git pull --rebase origin master


这将从远程分支下载并合并最新的更改,并使您的本地分支保持最新状态。

如果在合并过程中出现冲突,请解决冲突并提交更改。

然后再次运行以下命令将更改推送到远程分支:

git push origin master


就可以解决问题了!
 

 四、Git连接Github

连接github的操作和连接gitlab一摸一样。不再重述,如有问题,可以在评论区提问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/157055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flutter创建不同样式的按钮,背景色,边框,圆角,圆形,大小都可以设置

在ui设计中&#xff0c;可能按钮会有不同的样式需要你来写出来&#xff0c;所以按钮的不同样式&#xff0c;应该是最基础的功能&#xff0c;在这里我们赶紧学起来吧&#xff0c;web端可能展示有问题&#xff0c;需要优化&#xff0c;但是基本样式还是出来了 我是将所有的按钮放…

【复盘】接口自动化测试框架建设的经验与教训!

为什么选择这个话题&#xff1f; 一是发现很多“点工”在转型迷茫期都会问一些自动化测试相关的问题&#xff0c;可以说自动化测试是“点工”升级的必经之路&#xff1b;二是Google一下接口自动化测试&#xff0c;你会发现很多自动化测试框架相关的文章&#xff0c;但是大部分…

小红书全自动加群引流脚本「 软件工具+引流技术教程」

软件介绍&#xff1a; 小红书群聊最新玩法&#xff0c;可自动检测群人数加群&#xff0c;不会加到垃圾群。定时发送广告&#xff0c;红书群聊的引流玩法回来了 功能一、自动搜索关键词加群&#xff0c;比如创业、项目、鞋子、包包、考公、考研… 功能二、自动检测群人数&…

宏集新闻 | 虹科传感器事业部正式更名为宏集科技

致一直支持“虹科传感器”的朋友们&#xff1a; 为进一步整合资源&#xff0c;给您带来更全面、更优质的服务&#xff0c;我们非常荣幸地宣布&#xff0c;虹科传感器事业部已正式更名为宏集科技。这一重要的改变代表了虹科持续发展进程中的新里程碑&#xff0c;也体现了我们在传…

vue中原生H5拖拽排序_拖拽图片也是同样的道理

原文地址【vue中原生H5拖拽排序_拖拽图片也是同样的道理】 H5有基于拖拽的事件机制&#xff0c;如果你还不熟悉&#xff0c;请看我之前的文章【拖拽上传】中有介绍。 原生拖拽API实现 由于比较简单直接上代码了&#xff1a; <!DOCTYPE html> <html lang"en&qu…

gwas数据获取如何获取完整的GWAS summary数据(1)------GWAS catalog数据库

IEU OpenGWAS project (mrcieu.ac.uk) UK Biobank - UK Biobank GWAS Catalog 在孟德尔随机化&#xff08;Mendelian randomization&#xff0c;MR&#xff09;研究中&#xff0c;对于暴露数据我们只需要那些显著的SNP信息&#xff0c;这样的信息在各种GWAS数据库中都是很容…

C++使用Tensorflow2.6训练好的模型进行预测

要在C语言中调用训练好的TensorFlow模型,需要使用TensorFlow C API。 https://tensorflow.google.cn/install/lang_c?hl=zh-cnten TensorFlow 提供了一个 C API,该 API 可用于为其他语言构建绑定。该 API 在 c_api.h 中定义,旨在实现简洁性和一致性,而不是便利性。 下载…

Jenkins 下载安装

下载 Jenkins 选择Download LTS是稳定版本,尽量选择稳定版本,然后选择你的开发系统. 安装 Jenkins需要JAVA环境&#xff0c;所以安装JAVA环境 Java Jenkins支持17、21等几个版本的Java&#xff0c;OpenJDK JDK 21.0.1 GA Release 安装不要安装到C盘,这个后面会占较大的…

体感互动游戏VR游戏AR体感游戏软件开发

随着科技的不断发展&#xff0c;体感互动游戏正逐渐成为游戏行业的一个重要趋势。这类游戏通过利用传感器、摄像头和运动控制器等技术&#xff0c;使玩家能够通过身体动作与游戏进行实时互动&#xff0c;极大地提升了娱乐体验。 1. 游戏设计与互动元素 体感互动游戏的核心在于…

HTML5生成二维码

H5生成二维码 前言二维码实现过程页面实现关键点全部源码 前言 本文主要讲解如何通过原生HTML、CSS、Js中的qrcodejs二维码生成库&#xff0c;实现一个输入URL按下回车后输出URL。文章底部有全部源码&#xff0c;需要可以自取。 实现效果图&#xff1a; 上述实现效果为&#…

LeetCode209.长度最小的子数组(滑动窗口法、暴力法)

LeetCode209.长度最小的子数组 1.问题描述2.解题思路3.代码4.知识点 1.问题描述 给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果…

C++静态链接库的生成以及使用

目录 一.前言二.生成静态链接库三.使用静态链接库四.其他 一.前言 这篇文章简单讨论一下VS如何生成和使用C静态链接库&#xff0c;示例使用VS2022环境。 二.生成静态链接库 先创建C项目-静态库 然后将默认生成的.h和.cpp文件清理干净&#xff0c;当然你也可以选择保留。 然…

SpringBoot 自动装配原理 - 支付宝支付封装starter

SpringBoot 自动装配 SpringBoot 自动装配原理详细介绍自定义 Spring Boot Starter1.读取配置文件2.注册 AlipayClient bean3.核心代码编写4.注册 AlipayAPI bean5.编写 META-INF/spring.factories 文件6.项目结构测试1.创建一个测试项目&#xff0c;引入自定义 starter 依赖2.…

vue3+elementPlus登录向后端服务器发起数据请求Ajax

后端的url登录接口 先修改main.js文件 // 导入Ajax 前后端数据传输 import axios from "axios"; const app createApp(App) //vue3.0使用app.config.globalProperties.$http app.config.globalProperties.$http axios app.mount(#app); login.vue 页面显示部分…

数据结构之栈的讲解

&#x1f495;" 春宵一刻值千金&#xff0c;花有清香月有阴。 "&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;leetcode刷题之哈希表的应用(1) 1.栈的概念 栈是一种只允许在一端&#xff08;栈顶&#xff09;进行数据操作的数据结构&#xff0c;具…

如何把A3 pdf 文章打印成A4

1. 用Adobe Acrobat 打开pdf 2 打印 选择海报 进行调整即可如下图,见下面红色的部分。

说一下类的生命周期

&#x1f47d;System.out.println(“&#x1f44b;&#x1f3fc;嗨&#xff0c;大家好&#xff0c;我是代码不会敲的小符&#xff0c;双非大四&#xff0c;Java实习中…”); &#x1f4da;System.out.println(“&#x1f388;如果文章中有错误的地方&#xff0c;恳请大家指正&a…

MySQL MHA高可用配置及故障切换

一、MHA相关概念 1&#xff0e;什么是 MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 …

二百零七、Flume——Flume实时采集5分钟频率的Kafka数据直接写入ODS层表的HDFS文件路径下

一、目的 在离线数仓中&#xff0c;需要用Flume去采集Kafka中的数据&#xff0c;然后写入HDFS中。 由于每种数据类型的频率、数据大小、数据规模不同&#xff0c;因此每种数据的采集需要不同的Flume配置文件。玩了几天Flume&#xff0c;感觉Flume的使用难点就是配置文件 二、…

信号的处理时机(内核态,用户态,如何/为什么相互转换,内核空间,cpu寄存器),信号的处理流程详细介绍+抽象图解

目录 信号的处理时机 引入 思考 -- 什么时候才能算合适的时候呢? 用户态转为内核态 引入 内核地址空间 引入 思考 -- 进程为什么能切换成内核态呢? 虚拟地址空间 注意点 原理 (总结一下) 为什么如何进入内核态 引入 介绍 底层原理(int 80) cpu的寄存器 用…