Linux服务器配置git服务

现在 Github 已经支持个人建立私有仓库,包括国内的一些开源平台如 Gitee 等也支持私有仓库,所以直接去建立私有仓库即可。或者可以自己买服务器搭建 GitLab。但是这篇文章作为早期探索还是有一定意义的。

Git是一个非常著名的分布式版本控制系统,而广大开发者更是习惯在最大的远程仓库GitHub上提交自己的代码。但是有时候,一些小项目不值得放到GitHub上去,或是由于隐私问题不好在GitHub的公共仓库上提交,自己也不愿意出钱购买私有仓库。在这种情况下,如何在一台自己的Linux服务器上搭建Git服务,并且和客户端(特别是Windows客户端)完美协同工作呢?

系统配置

服务器:Ubuntu 16.04
客户端:Windows主机(Windows 7以上)

安装Git和SSH

在服务器上运行apt安装git和openssh-server即可,非常方便。

$ sudo apt install git openssh-server

客户端由于是windows,没有原生ssh,因此需要下载git for windows和putty。安装过程略。

生成密钥对

安装完成之后,在客户端的命令行中运行如下命令生成SSH密钥对:

C:\> ssh-keygen -t rsa

按照提示操作即可,为了简便起见不用设置ssh密钥的密码。
执行上述命令之后可以在C:\Users\用户名.ssh目录下找到id_rsa.pri和id_rsa.pub两个文件。分别是你的私钥和公钥。

在服务器上同样运行这个命令,则可以在/home/用户名/.ssh中也找到这两个文件,但是我们并不关心服务器上这两个文件的内容,除非服务器需要ssh连接客户端。

将客户端公钥复制到服务器

在服务器上新建authorized_keys文件。

$ cd .ssh
$ touch authorized_keys

然后将客户端公钥文件id_rsa.pub文件的内容复制到authorized_keys文件中去。如果有多个客户端,则需要将每个客户端的公钥都复制到authorized_keys中,一行一个。

对于windows客户端,可以通过putty自带的pscp命令将id_rsa.pub文件复制到服务器,再ssh进入服务器操作(当然如果有服务器的直接操作权限那就更好啦)

新建git仓库

在服务器上新建你要作为git仓库的文件夹,例如:

$ mkdir myrepo

这里的myrepo应当根据实际要求替换成你自己的仓库名。
然后执行下列命令:

$ cd myrepo
$ git --bare init myrepo.git

这样就建立好了自己的仓库。

修改SSHD配置

网上很多教程到上面一步就结束了,但是它们都漏了很重要的一步。就是修改sshd的配置。

$ sudo vim /etc/ssh/sshd_config

确保以下几处配置:

StrictModes no  #由yes改为no
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys #这里要取消注释

这样做的目的是使以后你推送到远程仓库时不需要再输入密码。

客户端配置

使用 git clone命令克隆远程仓库:

> git clone username@host:/myrepo/myrepo.git

即可完成远程仓库的克隆。这里的 username应替换成你远程仓库主机的用户名, host一般是远程仓库的IP地址,或者你可以将远程计算机名添加入客户端的host文件。

完成工作并提交更改以后,可以使用 git push命令将你的修改推送到远程仓库。

> git push origin master

这里的master也可以是其他分支,涉及到git的详细操作教程,本文这里不展开。

修改远程仓库地址的方法

有的时候远程仓库地址并不是一个静态IP地址,可能会随着DHCP协议重新分配,那么当远程仓库的IP地址发生了变化后怎么在客户端修改远程仓库的地址呢?只要进入你克隆的目录下,找到 .git/config文件,将其中的远程仓库地址修改为新的地址即可。

服务器上仓库的重建

非常简单,只要你在别的地方有克隆过版本库,在config文件中修改新的仓库地址,然后push所有的分支即可完成仓库重建。

本文描述了在linux下配置git服务器和ssh服务,以及如何使用Windows系统连接到自建的git服务器并完成克隆、推送等一系列操作的方法。修正了一些网上教程的缺漏。在笔者的环境下(一台服务器、一台客户端)配置成功。希望本文对各位想在自己的服务器上搭建git服务进行版本控制的朋友有所帮助。

Original: https://www.cnblogs.com/ryuasuka/p/5776617.html
Author: 飞鸟_Asuka
Title: Linux服务器配置git服务

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/609681/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 操作系统实战45讲笔记-01 程序的运行过程:从代码到机器运行

    计算机硬件是无法直接运行C 语言文本程序代码的,需要 C 语言编译器,把这个代码编译成具体硬件平台的二进制代码。再由具体操作系统建立进程,把这个二进制文件装进其进程的内存空间中,才…

    Linux 2023年6月7日
    078
  • LDD3第三章学习笔记

    思维导图 需求 实现一个设备/dev/scull,这个设备能用dd, cp, cat和Shell的IO重定向功能操作。 设备号 Linux用主次两个设备号去唯一的表示一个设备。其中…

    Linux 2023年6月7日
    084
  • bash 教程-1 shell 基础 快捷键 目录堆栈 操作历史 [MD]

    我的GitHub 我的博客 我的微信 我的邮箱 bqt20094 baiqiantao@sina.com Bash 简介 Bash 是 Unix 系统和 Linux 系统的一种 S…

    Linux 2023年5月28日
    086
  • go语言接口

    接口在底层的实现有两个部分:type 和 data。 在源码中,显式地将 nil 赋值给接口时,接口的 type 和 data 都将为 nil。此时,接口与 nil 值判断是相等的…

    Linux 2023年6月13日
    062
  • django admin用法

    django admin用法 – 基本使用 给几个字段加标题 添加关联的对象 自定义后台展示列表字段 过滤功能 搜索功能 django admin用法 基本使用 fro…

    Linux 2023年6月14日
    0160
  • Java 内功修炼 之 数据结构与算法(二)

    一、二叉树补充、多叉树 1、二叉树(非递归实现遍历) (1)前提前面一篇介绍了 二叉树、顺序二叉树、线索二叉树、哈夫曼树等树结构。可参考:https://www.cnblogs.c…

    Linux 2023年6月11日
    069
  • [转载]C++中new和malloc的区别

    new与malloc的10点区别 1. 申请的内存所在位置 new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储…

    Linux 2023年6月7日
    070
  • Redis主从复制

    一、主从复制 1、redis为什么还要主从复制? 和Mysql主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支…

    Linux 2023年5月28日
    062
  • docker安装zabbix

    Zabbix 为每个组件都提供了 Docker 镜像 ,作为弹性和自给自足的容器,促使加快部署和更新过程。Zabbix 组件支持 MySQL 和 PostgreSQL 数据库、Ap…

    Linux 2023年6月6日
    079
  • 什么?Android上面跑Linux?

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 前言 众所周知,现在程序员因为工作、个人兴趣等对各种系统的需求越来越大,部分人电脑做的还是双系统。其中,比较常见的有各种模拟器、…

    Linux 2023年5月27日
    0110
  • Redis和Memcache

    redis 和memcached都支持集群 Redis支持的数据类型要丰富得多,Redis不仅仅支持简单的k/v类型的数据,同时还提供String,List,Set,Hash,So…

    Linux 2023年5月28日
    084
  • 互斥锁与多线程间共享全局变量

    互斥锁 一、 代码展示 ① 没加锁(X) import threading num = 0 def write1(): global num i = 1 while i 运行结果 …

    Linux 2023年6月14日
    097
  • 一个轻量级的C++ log日志库

    一、简介 为了自己使用写的一个简单日志库,使用仅需包含一个头文件,支持Windows和Linux平台,支持多线程控制台输出以及写日志文件。 二、调用方式 #include &quo…

    Linux 2023年6月7日
    078
  • nodejs调用shell

    shelljs https://github.com/shelljs/shelljs 实例 var shell = require(‘shelljs’); if (!shell.w…

    Linux 2023年5月28日
    093
  • Java秒杀系统一:环境搭建和DAO层设计

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月11日
    0116
  • python一键探测编码

    程序功能 按文件输出编码or按编码输出文件 源码 主要代码功能 1.实现文件遍历 2.chardet获取编码 3.传参,对符合编码条件的文件输出 4.打开文件夹选择对话框 程序功能…

    Linux 2023年6月7日
    0114
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球