如何部署 git 服务

Git是一个分布式版本控制软件,最初由林纳斯·托瓦兹创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。Git是目前世界上最先进的分布式版本控制系统(没有之一)。那什么是版本控制系统?如果你曾经做过设计或者修改过PS文件,一定有过这样命名“初稿”,“初稿-1”“终稿”“这一定是终稿”“在改稿我就……”……

过了几天,你想找回当时写过某段文字,只好一个文件一个文件去看。看着一堆文件,想删又不敢删,怕那一天用到。有时候和同事协作修改一个文件,你这边改完了又得发给对方去修改,又费时又费力。有没有那个软件能让我方便修改代码,同样又能快速分享给同事呢?有的,这就是Git服务器,今天我们来教大家搭建一个Git。

想要搭建Git服务器需要服务器才能正常使用,想学习的同学可以去腾讯云开发者实验室免费领取主机进行在线手动实验。如果打算长期使用,也可以购买一台服务器。

安装Git

我们这里提供两种方式进行Git的安装,我这使用的系统是Ubuntu Server 16.04.1 LTS版本,其他操作系统安装请参考官方文档

使用apt包管理器安装(推荐)

我们可以使用apt包管理器进行安装,但是Ubuntu官方使用的Git版本过旧,所以我们需要添加Git官方最新版的地址进行安装,安装起来很简单,请参考下面的命令。

sudo add-apt-repository ppa:git-core/ppa

输入完成后,系统会提示

Press [ENTER] to continue or ctrl-c to cancel adding it

我们只需要按下键盘上的回车键即可添加官方最新版地址,然后我们使用sudo apt-get update来更新列表,更新完成后使用sudo apt-get install git来安装Git。

sudo apt-get update
sudo apt-get install git

等待几分钟后,Git就完成了安装,我们可以通过下面的命令来检查Git是否安装完成。

git --version

当提示类似如下后,我们的Git就安装完成了。

ubuntu@VM-0-7-ubuntu:~$ git --version
git version 2.19.1

使用编译安装

在编译之前,我们需要安装一些编译所需要的软件,你可以直接使用下面的命令进行安装。

sudo apt-get update
sudo apt-get install build-essential libssl-dev libcurl4-gnutls-dev libexpat1-dev gettext unzip -y

几分钟后,这些软件就被安装完成,我们可以开始下载Git的源码包了。Git源码存储在Github上,因为我们没有下载安装Git,所以我们不能使用git clone功能去克隆这个项目,但是我们可以通过别的方法去下载Git源码,我们点击这里查看Git已经发布版本的源码。找到最新版,然后复制其源码地址。

然后使用wget命令将其下载到你的服务器上,之后将其解压出来。

wget -c https://github.com/git/git/archive/v2.19.1.zip -O git.zip
unzip git.zip
cd git-*

现在,我们已经下载并解压完成,可以开始对其进行编译了。输入make然后耐心等待,编译速度看你当前服务器的配置。

make

你会看到类似下面的输入

GIT_VERSION = 2.19.1
    * new build flags
    CC credential-store.o
    * new link flags
    CC common-main.o
    CC abspath.o
......
    GEN bin-wrappers/test-line-buffer
    GEN bin-wrappers/test-parse-options
    GEN bin-wrappers/test-pkt-line
    GEN bin-wrappers/test-svn-fe
    GEN bin-wrappers/test-tool
    GEN git-remote-testgit

编译完成后什么都没有提示,我们就可以开始安装了。输入sudo make install耐心等待。

sudo make install

同样,会有一大堆输出。具体如下:

    SUBDIR git-gui
    SUBDIR gitk-git
    SUBDIR templates
install -d -m 755 '/home/ubuntu/bin'
install -d -m 755 '/home/ubuntu/libexec/git-core'
......
done && \
./check_bindir "z$bindir" "z$execdir" "$bindir/git-add"

接下来,我们就可以看看是否编译安装完成了。

ubuntu@VM-0-7-ubuntu:~$ git --version
git version 2.19.1

我们看到,git命令已经正确安装。

创建Git账户及密码

接下来,我们创建一个名为gituser的账户给Git使用,可以使用下面的命令。

sudo useradd -m gituser

之后,为这个账户设置密码

sudo passwd gituser

这里输入密码的时候是没有提示的,输入一遍密码后回车在输入一遍即可创建。为了安全考虑,接下来我们要设置限制 git 账号的 ssh 连接只能是登录 git-shell,在你的命令行中输入下面的命令检查git的安装位置。

which git

可能输出是这样子的,我们记下这个位置,我这里是通过编译安装的,所以位置在/home/ubuntu/bin,其他人位置会有所不同。

ubuntu@VM-0-7-ubuntu:~/bin$ which git
/home/ubuntu/bin/git

之后我们编辑/etc/passwd这个文件,找到gituser行,然后改为下面的代码。

sudo nano /etc/passwd
gituser:x:1000:1000::/home/gituser:/home/ubuntu/bin/shell

注意将/home/ubuntu/bin更换为上一步你用which git找到的目录。

初始化Git仓库

接下来我们创建/data/git目录用于存放Git仓库。

sudo mkdir /data/git

创建完成后,我们初始化这个仓库。

sudo git init --bare first.git

我们远程项目就已经创建了,最后同样是为了安全考虑,我们给Git仓库目录设置用户和用户组并设置权限。

sudo chown -R gituser:gituser /data/git
sudo chmod 755 /data/git

从本地clone你在服务器的项目

接下来,我们就可以开始测试你在远程服务的项目是否能正常clone了,请在本地电脑使用下面的命令。

git clone gituser@你的服务器的地址:/data/git/first.git

这时,你可能会看到如下输出

E:\Desktop>git clone gituser@118.24.118.150:/data/git/first.git
Cloning into 'first'...
The authenticity of host '118.24.118.150 (118.24.118.150)' can't be established.
ECDSA key fingerprint is SHA256:Pj1Ggh9AQxBM3kM1Be75bV9jfJ8ER7bbE1N0cm81rII.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '118.24.118.150' (ECDSA) to the list of known hosts.
gituser@118.24.118.150's password:
warning: You appear to have cloned an empty repository.

注意,系统会要求你输入密码,输入的时候没有显示,输入完成回车即可。这时,系统提示你已经完成clone,并且因为我们在储存库没有任何文件,系统提醒我们可能clone了一个空的储存库。

总结

至此,Git 服务器搭建完成, 从此以后你可以方便地将你的本地代码提交到 Git 服务器托管了。如果自己无条件或不想搭建Git服务,欢迎大家使用免费的腾讯Git代码托管(工蜂)服务,腾讯云为开发者提供基于 Git 的在线代码托管工具,包含代码提交/存储/下载/复刻/分支/历史/比对/合并等功能。可一站式完成对代码及代码质量管理,项目及项目人员管理,大大提升研发效率。有任何使用问题欢迎大家留言评论哦!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏陈树义

如何在IntelJ下用Maven创建一个Web项目

相信一开始做Web项目的同学都是直接把项目包放在WEB-INF/lib目录下,然后就开始做项目了。但是之后接触了一些使用了Maven进行包管理的项目,我们就不得...

27960
来自专栏枕边书

一键部署进化史

前言 ---- 之前的文章说过 由 PHP 转到 Java 之后,非常不适应的一点就是代码部署过程耗时长,调试不便,虽然可以使用 debug,但有时候还是需要修...

51980
来自专栏L宝宝聊IT

Linux基础——RAID和LVM

37240
来自专栏云计算教程系列

如何在CentOS 7上安装MariaDB

MariaDB是一个开源数据库管理系统,通常作为流行的LEMP(Linux,Nginx,MySQL/ MariaDB,PHP / Python /Perl)运行...

35140
来自专栏非著名程序员

Android Studio代码混淆插件

? 最近有人在公众号的后台留言说让我讲讲Android代码混淆,我最近也正在想这个问题,怎样才能把混淆讲清楚和明白,不过这回不愁了,正好有人来投稿。而且还是插...

23590
来自专栏Sorrower的专栏

详尽! Win10安装Java8+Tomcat9!

Java也好, Tomcat也好, 都是很实用的啦, 早点掌握还是有必要的. 喜欢记得点赞哦, 有意见或者建议评论区哦, 当然暗中关注我也是可以的.

38330
来自专栏枕边书

Linux - 请允许我静静地后台运行

前言 常在 linux 下玩耍的开发者肯定会经常遇到需要对进程调度的情况,在 windows 中点击 最小化 去干别的就 OK 了,那么在 linux 下怎么办...

26050
来自专栏JAVA高级架构开发

浅谈Nginx服务器的内部核心架构设计!

Nginx---Ngine X,是一款免费的、自由的、开源的、高性能HTTP服务器和反向代理服务器;也是一个IMAP、POP3、SMTP代理服务器;Nginx以...

34800
来自专栏佳爷的后花媛

SVN命令解析以及问题解决(update...)

1.Repo-browser(浏览版本库) 通过“浏览版本库”可以直接查看服务器上指定目录下的所有目录结构(需要有相关权限),包括特定版本的作者,提交时间等,...

94630
来自专栏懒人开发

bpkg工具

最近接手一个项目 本来是jenkinsfile相关, 但是由于这里很多实现都是用的shell 并且还是用的 bpkg 做的管理, 再在bpkg基础上, 写了...

18730

扫码关注云+社区

领取腾讯云代金券