git分布式管理-头歌实验搭建Git服务器

一、Git服务器搭建

任务描述

虽然有提供托管代码服务的公共平台,但是对一部分开发团队来说,为了不泄露项目源代码、节省费用及为项目提供更好的安全保护,往往需要搭建私有Git服务器用做远程仓库。Git服务器为团队的开发者们,提供了协作开发平台,开发者可以基于私有的Git服务器进行项目开发。

本关任务:搭建本地Git服务器。

相关知识

Git服务器必须搭建在Linux系统下,因此必须准备一台运行Linux系统的主机,这里我们推荐Ubuntu或者Debian系统。 #####搭建远程登录Git服务器 如果你已经有了一台运行Ubuntu系统的主机,而且取得了root权限,那么如果你想要在该主机上搭建Git服务器,需要以下几个步骤。

安装并配置git

首先要在主机上安装git服务,在Ubuntu下安装git只需要一条命令即可:

sudo apt-get install git

这样就在该主机上安装了Git服务,然后执行git config,即可完成git的配置。

创建一个用户用来运行git服务的用户

创建一个专门的服务,来运行git服务,是为了使git服务和系统的其它服务不冲突。如果git服务可以在root权限下运行,则以root用户使用git服务即可,并不需要创建专门的用户去运行git服务。这里,我们假设创建一个名为educoder的用户,来运行git服务:

sudo adduser educoder

这样就可以在educoder用户下运行git服务。

创建证书登录

虽然是私有的Git服务器,但是也不能允许主机随意向Git服务器推送代码。因此,必须将需要使用Git服务器,即需要登录到Git服务器的主机的公钥(即id_rsa.pub文件)导入Git服务器的/home/git/.ssh/authorized_keys文件里,一行一个。

初始化git仓库

然后,就需要在主机下,选定一个目录做为Git仓库。如果我们使用/tmp/educoder.git做为远程仓库,则需要在/tmp目录下执行: sudo git init --bare educoder.git 这样,Git就会创建一个空白的仓库,里面没有内容,也不存在工作区和暂存区。这是因为Git仓库只是为了托管代码,所以不需要用户直接登录到Git服务器上去做修改。当我们创建了Git仓库之后,对应第二步创建专门的用户来运行Git,这一步需要将仓库的所属关系更改为相应用户,即:

sudo chown -R educoder:educoder educoder.git
禁用shell登录

出于安全考虑,第二步创建的educoder用户不允许登录shell,可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改为: git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell 这样,eudcoder用户可以正常通过ssh使用git,但是无法登录shell。 通过以上步骤就完成了Git服务器的搭建,然后就可以通过Git命令,克隆远程仓库,并向远程仓库推送代码了

搭建本地Git服务器

但是,在本实训中,所有的用户都是在很高的权限下进行操作,本实训的目的也是为了让用户体验私有Git服务器,并掌握其搭建过程。因此,本实训允许在root权限下运行git服务,且需要以bash方式使用git操作。因此,需要在本机搭建Git服务器,且在本机执行克隆、推送等操作。为了满足这一要求,只需以下步骤即可。

安装并配置git

方法同远程Git服务器搭建步骤1

初始化git仓库

由于是在本机执行操作,因此不需要证书管理,则可以直接执行初始化Git仓库的操作。假设远程仓库地址为/home/sample.git,则可以在/home目录下执行:

sudo git init --bare sample.git

这样即可完成Git仓库的初始化。

由于需要在本地执行git操作,因此,也不需要设定Git服务器的登录方式。由在远程服务器搭建的步骤5中可知,git默认支持bash操作,因此也不需要再做改动。

由于需要在本地执行git操作,因此,也不需要设定Git服务器的登录方式。由在远程服务器搭建的步骤5中可知,git默认支持bash操作,因此也不需要再做改动。

仅需要以上两个步骤,即可完成本地Git服务器搭建。该服务器允许通过bash和远程仓库操作,且直接使用目录名做为远程仓库名。如果按照以上步骤生成了远程仓库/home/sample.git,则可以直接在本机目录下,执行如下格式的命令,完成远程版本库的clone:

git clone /home/sample.git

即可以直接把某个目录做为远程仓库。这种方式不是典型的远程仓库模式,但是做为体验远程仓库的方法,它简单方便,可操作性强。因此,本实训就只考察本地版本库的搭建,而把远程仓库的搭建做为体验性内容由用户自己完成。

编程要求

平台已经为你提供了一台运行Ubuntu系统的Linux主机,且已经为你安装了git,但是尚未进行配置。本关的编程任务是补全右侧代码片段中BeginEnd中间的脚本,具体要求如下:

  • 配置git的用户名和邮箱;
  • /tmp目录下初始化educode.git仓库,即仓库地址为 /tmp/educoder.git
#配置Git
git config --global user.email "you@example.com"
git config --global user.name "Your Name"

#进入/tmp目录
cd /tmp

#请在下方Begin/End星号线内填写git命令以初始化educoder.git仓库
#********** Begin **********#
git init --bare educoder.git
#********** End **********#

二、配置别名

任务描述

在操作Git的过程中,我们经常需要手动敲入类似于git statusgit checkout等命令。而statuscheckout这些单词较长,每次都要完整敲入的话,不仅浪费时间,而且还容易输错。如果可以为命令设置简写的话,比如以git st来代替git status,则会使操作变得更加简单方便。实际上,Git允许我们为git命令设置别名,以达到简化操作的目的。

本关任务:为git命令设置别名。

相关知识
设置别名

设置别名需要使用的命令是git config --global alias,其具体使用方法示例如下:

#为status设置别名st
git config --global alias.st status

执行以上步骤,即可将st设置为status的别名,即执行: git st的效果等效于执行git status。 同样,如果需要为其他命令设置别名,也可以采用相同的方式:

#为checkout设置别名co
$ git config --global alias.co checkout
#为commit设置别名ci
$ git config --global alias.ci commit
#为branch设置别名br
$ git config --global alias.br branch

需要指出的是--global参数是一个全局参数,即设置的这些别名可以在这台主机的所有Git仓库下使用。如果不加这个参数,则只对当前的仓库起作用。

删除别名

如果需要删除已经设置的别名的时候,则需要执行以下步骤:

  • 删除所有别名: 删除所有别名用到的命令为:

    git config [--global] --remove-section alias

    其中,--global是可选参数,加上这个参数也将本主机所有git仓库下的别名都删除,不加这个参数则仅删除本仓库下的别名。

  • 删除指定别名:

    git config [--global] --unset alias.你的别名

    同样的,--global也是一个全局参数。如果要删除本主机所有仓库下的st别名,则可以执行以下命令:

    git config --global --unset alias.st
  • 查看别名: 如果要查看当前主机已经设置了哪些别名,则可以执行以下命令:

    git config --list | grep alias

    会得到类似于alias.st=status的信息,这就是说系统当前已经为status设置了别名st

本关的编程任务是,补全右侧代码片段中BeginEnd中间的脚本,具体要求如下:

  • status设置全局别名st
  • checkout设置全局别名co
  • commit设置全局别名ci
  • branch设置全局别名br
#请在下方Begin/End星号线内填写git命令为系统设置全局别名
#********** Begin **********#
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch


#********** End **********#

三、公共版本库的使用之码云、Github

任务描述

本关任务:在码云上创建自己的项目。

相关知识
Github和码云的介绍

GitHub是通过Git进行版本控制的软件源代码托管服务,由GitHub公司(曾称Logical Awesome)的开发者Chris WanstrathPJ HyettTom Preston-Werner使用Ruby on Rails编写而成。

GitHub同时提供付费账户和免费账户。这两种账户都可以创建公开的代码仓库,但是付费账户还可以创建私有的代码仓库。根据在2009年的Git用户调查,GitHub是最流行的Git访问站点。除了允许个人和组织创建和访问保管中的代码以外,它也提供了一些方便社会化共同软件开发的功能,即一般人口中的社区功能,包括允许用户追踪其他用户、组织、软件库的动态,对软件代码的改动和bug提出评论等。GitHub也提供了图表功能,用于概观显示开发者们怎样在代码库上工作以及软件的开发活跃程度。

码云 Gitee (最新独立域名)是由开源中国出品,旨在树立国内代码托管和协作开发的行业标杆,灵活便捷地支撑个人、团队、企业的开发需求的产品。码云这一产品名称,指代的是“代码”和“云平台/云服务”。它和Github的区别是码云的私有库也是完全免费的,它提供中文服务,从而能够更好地服务国内开发者。码云分为企业版和个人版。企业版相对于个人版而言,其针对国内中小型开发团队敏捷开发的实践需要,除了代码托管之外,重点强化了与代码联系最密切的项目/任务管理和文档功能。

码云

对于一个没有使用过码云的开发者来说,如果要在码云上创建项目需要采用以下步骤。

注册

首先,我们需要到码云主页面去注册一个账号,码云的网址是https://gitee.com,其主界面如下所示

点击右上角红色框内的注册按钮,根据提示完成注册,即可获得一个码云账号。 登陆后主界面如下所示:

右上方红色框的加号按钮,提供的下拉菜单有进一步的操作。

创建项目

点击右上方的加号按钮,选择新建项目:

之后,进入新建项目界面,其界面显示如下:

从图中可以看到,我们可以设置自己项目的名称,并对自己的项目进行介绍。同时,我们也可以设置自己项目所采用的语言,并添加gitignore文件及添加开源许可证。在最下方,我们也可以选择将我们的项目进行公开或者保持私有,也可以选择初始化项目的方法。在项目介绍下方的三个下拉框内有更为详细的操作,请自行注册体验。 当设置好我们的项目的细节后,点击新建之后就完成了项目的创建:

在项目详情的右上角有HTTPS以及SSH协议的远程仓库地址,使用这个地址我们就能向向这个仓库推送代码。

推送代码

当在码云上创建了项目,从而创建了代码仓库之后,我们就可以向其推送代码,如下图所示:

我们在本地创建版本库,并添加在上一步骤中创建的码云仓库做为远程仓库。使用pull操作拉取远程分支内容之后,通过ls命令可以看到,将远程仓库的README.md这一初始化文件拉取到了本地。随后我们添加helloGit文件,并将其提价到本地仓库,随后我们将其推送至远程仓库,如下图所示:

注意,推送过程中会提示你输入用户名和密码,这里需要使用注册用的邮箱和登录密码。 然后我们观察码云上的版本库可以看到:

helloGit文件已被推送至码云上的代码仓库。

Github
创建并使用代码仓库

为了使用Github,必须首先在其官网注册账号,注册完成后,点击右上角加号按钮创建仓库:

然后,配置新仓库的名称、描述信息、公开或者私有以及是否初始化等选项:

之后就完成了仓库的创建,在仓库的主界面我们可以看到如下界面: 在界面右上角点击Clone or download按钮,就能看到仓库的远程地址:

之后就完成了仓库的创建,在仓库的主界面我们可以看到如下界面: 在界面右上角点击Clone or download按钮,就能看到仓库的远程地址:

但是仅有仓库地址,还无法向其推送代码。因为Github要求认证主机,即需要在项目的证书列表中,添加主机的公钥。然后改主机,才能向此仓库推送代码。点击Settings按钮,选择Deploy keys选项,可以看到如下界面:

在右侧的Title输入框设置公钥的名称,然后在下方的key输入框中,写入相应主机的公钥,然后该主机就能向该仓库推送代码。

Fork和Pull Request

Github提供了fork功能。当我们发现某一个优秀的开源项目,并想为项目贡献代码时,点击fork即可复制该项目到自己的账户下的一个仓库。

在自己的仓库下进行修改后,可向原项目发起pull Request,以请求将自己的代码合并进原项目。项目发起方收到你的pull request后,会对你的代码进行审核,审核通过则会将你的修改合并到项目中去。这种模式也是目前流行的开源项目的发展模式。

Star

当你对一个项目很感兴趣,想实时关注该项目的进展时,可以star该项目,这样,当项目有改动时你就可以及时收到通知。

编程要求

本关的任务是,在码云上注册账号,并创建项目,然后将此项目做为远程仓库地址,向其master分支推送gitTraining.txt文件。具体要求如下:

  • 在码云上注册账号并创建项目;
  • 向项目中推送gitTraining.txt文件;
  • 将项目的版本库地址填入右侧Begin/End星号线内。
git remote add origin https://gitee.com/your_username/your_project.git

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

netty草图笔记

学一遍根本记不住&#xff0c;那就再学一遍 public static void test_nettyFuture() {NioEventLoopGroup group new NioEventLoopGroup();log.info("开始提交任务");Future<String> future group.next().submit(() -> {log.info("执行异步任…

【操作系统概念】第11章:文件系统实现

文章目录 0.前言11.1 文件系统结构11.2 文件系统实现11.2.1 虚拟文件系统 11.3 分配方法11.3.1 连续分配11.3.2 链接分配11.3. 3 索引分配 11.5 空闲空间管理11.5.1 位图/位向量11.5.2 链表11.5.3 组 0.前言 正如第10章所述&#xff0c;文件系统提供了机制&#xff0c;以在线存…

计算机设计大赛 疫情数据分析与3D可视化 - python 大数据

文章目录 0 前言1 课题背景2 实现效果3 设计原理4 部分代码5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 大数据全国疫情数据分析与3D可视化 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff0…

Halcon深度学习,异常值缺陷检测

前言 halcon深度学习分为常见的4大类。分类&#xff0c;语义分割&#xff0c;异常值检测&#xff0c;深度OCR。本篇主要针对halcon的异常值检测&#xff0c;如何训练和部署&#xff0c;并通过图像预处理的方式实现对异常值缺陷检测的精准实现。 异常值检测不同于语义分割的项目…

【python】异常处理

前言 省略各种废话&#xff0c;直接快速整理知识点 try-except 基础 作用 程序不可能永远都是对的&#xff0c;当7除a&#xff0c;a由用户输入时&#xff0c;用户输入0就会报错。try-except就是解决这些问题。 结构 多分支自定义错误类型 上方的exception是一个错误类型…

Unity编辑器功能Inspector快捷自动填充数据和可视化调试

我们有时候可能需要在面板增加一些引用&#xff0c;可能添加脚本后要手动拖动&#xff0c;这样如果有大量的脚本拖动也是不小的工作量 实例 例如&#xff1a;我的脚本需要添加一个Bone的列表&#xff0c;一个个拖动很麻烦。 实现脚本 我们可以用这样的脚本来实现。 public…

Python 3 教程(2)

Python3 基础语法 编码 默认情况下&#xff0c;Python 3 源码文件以 UTF-8 编码&#xff0c;所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码&#xff1a; # -*- coding: cp-1252 -*- 上述定义允许在源文件中使用 Windows-1252 字符集中的字符编码&…

JavaSec 基础之 URLDNS 链

文章目录 URLDNS 链分析调用链复现反序列化复现 URLDNS 链分析 URLDNS是ysoserial里面就简单的一条利用链&#xff0c;但URLDNS的利用效果是只能触发一次dns请求&#xff0c;而不能去执行命令。比较适用于漏洞验证这一块&#xff0c;而且URLDNS这条利用链并不依赖于第三方的类…

幕译--本地字幕生成与翻译--Whisper客户端

幕译–本地字幕生成与翻译 本地离线的字幕生成与翻译&#xff0c;支持GPU加速。可免费试用&#xff0c;无次数限制 基于Whisper&#xff0c;希望做最好的Whisper客户端 功能介绍 本地离线&#xff0c;不用担心隐私问题支持GPU加速支持多种模型支持&#xff08;中文、英语、日…

web服务,C/S框架,单设备登陆实现方案

背景: 原登陆接口,校验密码通过后,使用springsession记录会话信息,将信息存入在redis中 基于原逻辑进行多设备登陆开发,默认的时候多设备登陆开关开启,即按原来逻辑处理,只要密码登陆校验成功之后,都会将当前的会话信息存入redis中. 当多设备开关关闭时候,同一个账号同一时间只…

Vue.js+SpringBoot开发高校大学生创业管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统公告模块2.2 创业项目模块2.3 创业社团模块2.4 政府政策模块2.5 创业比赛模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 系统公告表3.2.2 创业项目表3.2.3 创业社团表3.2.4 政策表 四、系统展示五、核心代码5.…

【Spring Boot 源码学习】BootstrapContext的实际使用场景

《Spring Boot 源码学习系列》 BootstrapContext的实际使用场景 一、引言二、往期内容三、主要内容3.1 BootstrapContext3.2 BootstrapRegistry 初始化器实现3.3 BootstrapContext 的实际使用场景3.3.1 早期启动时3.3.2 环境配置准备完成时3.3.3 应用上下文准备完成后关闭 Boot…

Normalizer(归一化)和MinMaxScaler(最小-最大标准化)的区别详解

1.Normalizer&#xff08;归一化&#xff09;&#xff08;更加推荐使用&#xff09; 优点&#xff1a;将每个样本向量的欧几里德长度缩放为1&#xff0c;适用于计算样本之间的相似性。 缺点&#xff1a;只对每个样本的特征进行缩放&#xff0c;不保留原始数据的分布形状。 公式…

Linux--gdb(调试工具)

1. 背景 程序的发布方式有两种&#xff0c;debug模式和release模式 Linux gcc/g出来的二进制程序&#xff0c;默认是release模式 要使用gdb调试&#xff0c;必须在源代码生成二进制程序的时候, 加上 -g 选项 2. 命令 gdb binFile 退出&#xff1a; ctrl d 或 quit 调试命令&am…

如何压缩PDF文件大小?看完这篇文章,即可实现无损压缩!

平时工作或生活中&#xff0c;很多小伙伴是不是经常喜欢用PDF格式进行文件的保存&#xff0c;毕竟它具有较高的兼容性&#xff0c;且在不同设备中打开也不会出现排版错乱的情况。不过有时候PDF文件会因为内容过大&#xff0c;占用的内存过多&#xff0c;从而导致电脑卡顿的情况…

深入理解MySQL中的MVCC(多版本并发控制)

在MySQL中&#xff0c;MVCC是一种用于提供并发控制的技术&#xff0c;它允许数据库系统在事务并发执行的情况下保持数据的一致性&#xff0c;同时提高了数据库的并发性能。MVCC背后的理念是允许每个事务可以看到一个一致性的快照&#xff0c;从而避免了读取操作被写入操作所阻塞…

【Python刷题】环形链表

问题描述 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&a…

树网的和 题解

先放一张图 作为一道蓝题&#xff0c;其实快接近紫题了。 --------------------------------------不怎么华丽的分割线-------------------------------------- 前置芝士&#xff1a;树的直径 一个点的最远点( y y y)到这个最远点的最远点( p p p)一定是一条树的直径。 假若…

Winform窗体随着屏幕的DPI缩放,会引起窗体变形及字体变形,superTabControl标签字体大小不匹配

一、前言 superTabControl做的浏览器标签(cefsharp)在缩放比例(125%,150%时字体不协调) 物联网浏览器,定制浏览器,多媒体浏览器(支持H264)参考栏目文章即可 二、配置参数 app.manifest参数 dpiAware =true <application xmlns="urn:schemas-microsoft-c…

Python快速入门系列-1

Python快速入门系列 第一章: Python简介1.1 Python的历史与发展1.2 Python的优势与特点1.2.1 易学易用1.2.2 动态类型1.2.3 丰富的标准库与第三方库1.2.4 面向对象与函数式编程1.2.5 广泛应用领域 1.3 Python的应用领域 第一章: Python简介 1.1 Python的历史与发展 Python是一…