Git

在个人远程服务器上搭建git服务器

最近想做程序的版本控制,但该程序包还未实现开源,所以放在github上有点不合适。当然我们可以选择github提供的私有版本库,但7美元每月的价格还是显得有点贵。

近来,笔者在腾讯云上买了一个私有服务器,故想在其上安装一个git的服务器版本,以实现程序包的版本控制。故有此文,记录之,以备后续可能之用。本文主要参考了廖学峰的博客

购买私有服务器

这是整个过程的前提,你需要先在阿里云、腾讯云等提供私有服务器的地方购买私有服务器,获取连接ip、用户名与密码。

如何让多人使用

获取了用户和登录密码后,还可以建立用户和登录密码,然后开放给其它朋友使用,这个参见一般的Linux的常用命令即可。

搭建远程git服务器

以下的步骤是通用的,大家按照这个来执行就可以了。

  1. 在远程服务器上安装git 通常来说,购买的云服务器会预装Ubuntu等常用的Linux发行版,在终端输入git,以此来查看是否已经安装好了git。如果该命令不存在,则使用apt安装即可。

    sudo apt-get install git

  2. 创建用户,用来使用git服务

    sudo adduser git # 创建一个git用户

  3. 创建证书登录 收集所有需要登录的用户的公钥,即用户本地电脑上的id_rsa.pub文件,然后把公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
  4. 初始化git仓库 先选用一个目录作为git管理仓库,然后建立一个裸仓库。

    mkdir srv # 开放给其它人使用的话,建立不同的以人名命名的文件夹 cd srv sudo git init –bare sample.git # sample.git的名字改成项目的文件夹名,当然也可以不同,因为推送的时候有关联的一步 则git会建立一个裸仓库,裸仓库没有工作区,因为服务器上的git仓库是为了共享。因此其不允许用户直接登录到服务器上去改动工作区,并且服务器上的git仓库通常就是以.git结尾的。然后我们更改该文件的权限(拥有者)。 sudo chown -R git:git sample.git

  5. 禁用shell登录(为了其它人使用方便,可以不执行) 处于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

    git:x:1001:1001:,,,:/home/git:/bin/bash 将其改为 git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell 这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

  6. 克隆远程仓库 现在就可以开始使用命令git clone克隆远程仓库了,在各自的电脑上运行

    git clone git@server: /srv/sample.git

  7. 开始推送
    • 首先关联本地文件夹项目   在本地的一个git管理的文件夹下,执行关联命令

      git remote add origin git@server:/srv/sample.git  注意远程库的名字为origin,这是git的默认叫法。当然你也可以叫其它的名字

    • 第一次推送

      git push -u origin master 注意,此时就把当前本地的分支master推送到远程的master分支了。当然你也可以推送其它分支。

由于远程库还是空的,所以我们第一次推送时,加上了-u参数,其作用是不仅推送本地的master分支到远程的master分支,还会把本地和远程的master分支关联起来,在以后做了修改后,推送和拉取时就可以简化命令了。

git push origin master

个人多终端模拟多用户

需要首先确定你准备用来工作的终端,然后收集各终端的用户名和rsa秘钥,就可以实现多终端维护一个代码。

在远程服务器上拉取

git clone git@server: /srv/sample.git

sha1:1090e0dbe854:aca6929f80759e01e07f8e603eddd11324e1b7fc