前言

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

系统配置

服务器:Ubuntu 16.04

客户端:Windows主机(Windows 7以上)

安装Git和SSH

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

  1. $ sudo apt install git openssh-server

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

生成密钥对

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

  1. C:\> ssh-keygen -t rsa

按照提示操作即可,为了简便起见不用设置ssh密钥的密码。

执行上述命令之后可以在C:\Users\用户名.ssh目录下找到id_rsa.pri和id_rsa.pub两个文件。分别是你的私钥和公钥。

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

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

在服务器上新建authorized_keys文件。

  1. $ cd .ssh
  2. $ touch authorized_keys

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

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

新建git仓库

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

  1. $ mkdir myrepo

这里的myrepo应当根据实际要求替换成你自己的仓库名。

然后执行下列命令:

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

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

修改SSHD配置

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

  1. $ sudo vim /etc/ssh/sshd_config

确保以下几处配置:

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

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

客户端配置

克隆远程仓库

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

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

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

工作并推送到远程仓库

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

  1. > git push origin master

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

修改远程仓库地址的方法

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

服务器上仓库的重建

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

总结

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

Linux服务器配置git服务的更多相关文章

  1. Linux搭建git服务端

    1.安装$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel$ yum inst ...

  2. LINUX服务器配置NFS服务,挂载外部存储实现目录共享

    安装nfs  rpcbind 一.服务端配置 安装 NFS 服务器所需的软件包:nfs 和 rpcbind # yum install nfs-utils # yum install rpcbind( ...

  3. gogs搭建git服务教程

    使用gogs搭建自己的git服务!!! 一.GIT服务器搭建方式 上一节课我们讲过GIT是一个分布式版本管理系统,既然是分布那么必定会涉及远程通信,那么GIT是采用什么协议进行远程通信的呢? git支 ...

  4. 我搭建了一套企业级私有Git服务,抗住了每天上万次攻击!

    写在前面 事情是这样的,今年疫情期间,我在某云购买了一套服务器,做什么呢?不是用来部署项目,也不是用来搭建网站,而是用来做代码备份和管理.没错,都是我个人的代码,也许你会说,你个人能有多少代码啊?确实 ...

  5. 【Linux】DNS服务-BIND从服务器、缓存服务器及转发服务器配置(三)

    环境 操作系统:CentOS 6.5 DNS软件:bind(安装参照:[Linux]DNS服务-BIND基础配置(二)) BIND从服务器 从服务器就是在bind的主配置文件中添加从域example. ...

  6. Gogs - 基于 Go 语言的自助 Git 服务

    Gogs(Go Git Service) 是一个基于 Go 语言的自助 Git 服务.Gogs 的目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Gogs ...

  7. CentOS服务器配置发送邮件服务

    CentOS服务器配置发送邮件服务 lsb_release -a 查看linux系统版本 在CentOS6以上版本自带mailx版本12.4 rpm -qa | grep mailx 查看系统自带的m ...

  8. Docker+Gogs搭建个人Git服务

    欢迎 经常使用Github的我,Github它功能强大,操作简单,不用FQ,所以大家会使用Github进行代码托管,但是,Github的私仓收费的,而且对于普通个人用户来说,价格也不便宜.很多人搭建自 ...

  9. Linux服务器配置(一)

    Linux服务器配置(一) jdk,tomcat,nginx记录 最近公司买了三台服务器System x3650 M5用来跑公司的项目.现,记录一下真机部署与后期维护历程~ 因为系统是服务器买来就装好 ...

随机推荐

  1. TFS 2013 生成(构建)历史记录保持策略(Retention Policy)

    TFS服务器通过自动构建,实现软件生成和发布的自动化过程,这一直是TFS系统中非常重要的一个功能模块.近年来发布的TFS版本,都在自动化构建方面大幅增强了相应的功能.在这篇博客里我主要总结TFS 20 ...

  2. AngularJS 控制器

    AngularJS 控制器 控制 AngularJS 应用程序的数据. AngularJS 控制器是常规的 JavaScript 对象. AngularJS 控制器 AngularJS 应用程序被控制 ...

  3. notepad++编译并运行java (自定义包)

    最近用Notepad++写汇编,感觉用起来挺顺手,于是想能不能也在这个优秀的编辑器下编写java并编译运行呢,因为每次启动eclipse都要挺长时间,而且eclipse实在太占内存了... 于是各种百 ...

  4. getline()函数

    这是一篇关于getline()函数的博客,以总结对输入输出流的掌握,不再在这些问题上栽跟头~ -------------------------- 1.首先我们知道,getline()函数的基本作用, ...

  5. cache缓存

    缓存分为:数据缓存,页面缓存,内存缓存(memcache,redis) ob,输出缓冲区,是output buffering的简称 FileCache.php <?php //本文件用来存储和读 ...

  6. [No00004A]为什么你看了很多书,却依然没有洞见

    摘要: 前几天有人在知乎上问:今天就回答下很多人问了很久的这个问题,并且解释一下如何构建系统化的知识体系.我想很多人看到这个问题,期待的答案是一个书单,可是我要告诉你这并没有什么卵用.我想大部分人都经 ...

  7. Navigator 对象

    Navigator 对象 Navigator 对象包含有关浏览器的信息. 注意: 没有应用于 navigator 对象的公开标准,不过所有浏览器都支持该对象. Navigator 对象属性 属性 说明 ...

  8. 条件注释判断浏览器版本<!--[if lt IE 9]>

    <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--><!--[if IE]> 所有的IE可识别 <![e ...

  9. JAVA和android 环境配置

    1.设置classpath .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME\lib\tools.jar; 2.JAVA_HOME D:\Program Files\Java\j ...

  10. php数组函数,字符串,linux命令

    1>> Linux常用命令一. 文件目录操作命令1. ls命令    命令格式:ls [选项] [目录名]    命令功能:列出目标目录中所有的子目录和文件.2. 命令格式:cd [目录名 ...