• 1
  • 1
分享
  • 【原创】手把手教你在 Ubuntu 上搭建 Git 服务器
  • sylan215 2019-03-27 11:17:57 字数 4039 阅读 2939 收藏 1

最近在写一些脚本,为了保持连续性,就在家也抽空赶进度,所以碰到了代码同步的问题,目前想到的方法有三个:

使用云盘,这个拿来即用,但是因为云盘还存放了其他一些东西,总是实时同步不太妥当;
使用 SVN,传统的代码托管工具,一直在用;
使用 Git,最新的分布式代码托管工具,据说很强大。

最后决定使用 Git,主要是学习下最新的技术。下面是操作步骤,做记录的同时也给其他同学做个指引:
先说下环境:

服务端: Ubuntu 16.04 x64
客户端: Windows7 x64

服务端配置

先使用如下命令切到 root 权限进行操作:

sudo bash

提示输入密码时,输入 root 密码即可。
登录成功后,开始安装 git,命令:

apt-get install git

提示是否继续时,输入 y 后回车,安装流程继续,并直至安装完成。
接着开始安装 ssh,命令:

apt-get install openssh-server openssh-client

同样在询问是否继续时,输入 y 后回车,安装会自动完成。
然后我们新建一个 git 专属用户,用户名也叫 git,命令:

adduser git

新建成功后会提示设置用户密码,请设置一个自己能记住的密码后继续,后续的详细信息可以酌情填写。
下面开始新建 git 仓库,我们选定仓库存放目录为 /srv 下面,仓库名 myfiles.git,所以命令:

git init --bare /srv/myfiles.git

因为当前用户是 root,为了让后面 git 专用账户能够操作仓库目录,我们需要把仓库目录授权给 git,命令:

chown -R git:git /srv/myfiles.git/

客户端操作

首先需要下载 Windows 版本的 git,下载地址:点击下载
下载完成后点击安装,并根据提示点击「下一步」,直到安装完成。
在客户端创建一个工作目录,比如我的是 gitdir,在工作目录内右键并点击 「Git Bash Here」。
在弹出的命令后窗口 clone 仓库到本地:

$ git clone git@192.168.252.128:/srv/myfiles.git
Cloning into 'myfiles'...
The authenticity of host '192.168.252.128 (192.168.252.128)' can't be established.
ECDSA key fingerprint is SHA256:zqtjAg+FGfWrT3SCp1Qa2KqhE2UOy3PmudhhrTFlm7A.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.252.128' (ECDSA) to the list of known hosts.
git@192.168.252.128's password:
warning: You appear to have cloned an empty repository.

注意请把「192.168.252.128」换成自己的服务端 ip,并且在确认时输入的是「yes」,最后输入的是创建 git 用户时候的密码。
为了客户端进行后续的提交操作,我们还需要注明当前机器的用户信息,命令后如下:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

注册后,commit 的时候会使用这个注册信息来记录操作人信息,然后在使用 git log 时可以看到对应的信息,效果如下图:

$ git log
commit ae72bcc89ea8f5d9d3a44f0e00cf35e91a1afce8 (HEAD -> master, origin/master)
Author: sylan215 <sylan215@sylan215.com>
Date:   Wed Oct 18 18:37:41 2017 +0800
    测试提交

至此,我们完成整个配置过程。

文件修改并同步到 Git 服务器

配置完成后,我们就进入实际使用环节了。
首先我们先修改几个文件,并拷贝到 myfiles 目录下,然后提交到服务端,在 myfiles 下运行提交命令:

git add .
git commit -am "测试提交"
git push

带输出的命令行内容:

$ git add .
$ git commit -am "测试提交"
[master (root-commit) ae72bcc] 测试提交
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt
$ git push
git@192.168.252.128's password:
Counting objects: 3, done.
Writing objects: 100% (3/3), 223 bytes | 223.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To 192.168.252.128:/srv/myfiles.git
 * [new branch]      master -> master

提示输入密码的地方,还是输入的 git 账户的密码。
说明:关于 git 操作的详细命令,请参考 这篇文章
提交成功后,我们在另一台机器上使用命令 git pull 同步最新内容:

$ git pull
git@192.168.252.128's password:
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From 192.168.252.128:/srv/myfiles
   ae72bcc..afad897  master     -> origin/master
Updating ae72bcc..afad897
Fast-forward
 test.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

对于多用户的复杂操作,请参考这篇文章

其它配置

禁用 git 账户的 shell

为了安全考虑,如果需要禁用 git 账户的 shell,可以修改 /etc/passwd 文件:
把其中的

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

修改为

git:x:1001:1001:git-user,,,:/home/git:/usr/bin/git-shell

其中 /usr/bin/git-shell 的路径可以通过命令 which git-shell 获得。

使用公匙和私匙实现免密效果

上面我们使用的过程中每次都需要输入 git 用户的密码才能和服务端交互,这样会很麻烦,这时候我们可以配置公私匙来实现免密。
首先,需要在客户端生成公私匙:

ssh-keygen -t rsa

回车后会提示输入私匙的密码,如果要免密就直接回车,否则自定义一个密码(如果自定义了密码,则每次 push 和 pull 时填入的是设置的密码)。
命令执行成功后,会在当前用户目录的.ssh文件夹(Windows 目录是 X:\Users{username}.ssh, Linux 是 /home/{username}/.ssh)生成文件「id_rsa」和「id_rsa.pub」,其中 .pub 文件就是公匙,另一个是私匙。
把文件「id_rsa.pub」拷贝到服务端,并使用如下命令进行设置:

mkdir /home/git/.ssh
cp /home/currentuser/Desktop/id_rsa.pub /home/git/.ssh/authorized_keys
chown -R git:git /home/git/.ssh

说明,如果 authorized_keys 文件不存在,可以使用 cp 命令,否则请使用 cat 命令追加,比如:

cat /home/currentuser/Desktop/id_rsa.pub >> /home/git/.ssh/authorized_keys

为了保证配置生效,还需要查看 /etc/ssh/sshd_config 文件中的如下设置是否开启:

AuthorizedKeysFile %h/.ssh/authorized_keys

是否被注释掉了,如果是,则需要把前面的 # 去掉,并重启 ssh 服务(命令 service ssh restart)。
全部配置完毕后,我们试试效果:

$ git pull
Already up-to-date.

看,这次没有提示输入密码了吧,免密设置生效。

非 22 端口连接 Git

在 .ssh 配置目录现在 config 文件,内容为:

host ip地址
port 端口名

config 配置文件在 Windows 和 Mac 系统的位置为:X:/users/username/.ssh 目录,其中 X 为系统盘, username 为当前登录用户名;
如果是 liunx 系列系统,位置为 /home/username/.ssh 目录,其中 username 为当前登录用户名。


  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 就目前我们互联网+中心的大多数APP产品而言,功能测试仍是整个测试过程的基础和重点,占比很大。除去每个产品和版本不同的业务需求以及功能,针对于大多数APP的共同点和移动设备的特性,本文总结了一些APP功能测试中经常遇见,需要考虑到的测试点以供参考。1.安装和卸载应用的安装和卸载在任何一款APP中都属于最基本功能。一旦出错,就属于优先级为紧要Critical的缺陷。因此APP的安装和卸载应作为一个测试点多加重视。主要关注以下几个方面:▲ 应用是否可以正常安装(命令行安装;豌豆荚/手机助手等第三方软件安装;apk/ipa安装包安装)▲应用是否可以在iOS和Android不同系统,版本,机型上进行安...
            12 14 3838
            分享
          • 时光给予了我们成长也赋予了我们经验,那来说说我的亲身经历吧!入行软件测试已经十年有余,曾经的我认为,进这行是一件非常简单的事情,只要是个正常人,会点点点,就可以很快胜任这份工作。的确我们起初认为的软件测试,无外乎就是整个软件开发完了,给测试从头到尾点一点,没什么问题,就能上线了。正是因为这个理解,所以留给我们的印象就是:测试职业,门槛低,入门简单 !如果找不到工作,或者不想干开发,就来做测试吧 。所以,出现了如下的一片景象:A写了几年代码,写不下去了,听说测试很好上手,先来做几年测试 。B小文员一枚,想入行 IT,听说测试入门简单,请问怎么入行 。C之前在工厂上班,太累,且工资低,想入行 IT...
            15 15 1052
            分享
          •   华为nova11系列及全场景新品发布会正式举办,nova11系列、畅享60X、MateBook系列等新品相继亮相。这其中,有一个“大家伙”非常值得关注,华为智慧屏S3Pro相较于上一代实现了全面升级,搭载智慧双芯实现了音画体验和智慧体验的大幅提升。同时,也带来了业界最强的超级投屏功能,全面革新投屏体验。  华为智慧屏S3Pro搭载了一颗4K旗舰主芯和一颗AI视觉芯片,智慧双芯的性能组合成为了行业新的解决方案。这颗4K旗舰主芯拥有四核A73CPU,主频可达1.5GHz,在应用启动速度、操作流畅性等方面起到了关键作用。同时,这颗芯片还配备了一块1.6TOPS的NPU单元,带来了鸿鹄AIHDR增...
            0 0 526
            分享
          • 7 月 29 日晚,Dify 主创团队如约与社区朋友们线上直面交流,由 Dify 的数据集产品&架构负责人姜勇(Jyong)给大家分享在企业知识库嵌入 AI ChatBot 应用中最核心的 Embedding 技术概念和 Dify 数据集的设计和规划。我们还整理了本次会议中用户关心的问题,供大家阅读参考。Embedding 技术的文本向量化"Embedding"是一种将离散型变量(如单词、句子或者整个文档)转化为连续的向量表示的技术。这个向量表示(Embedding)可以捕捉到离散型变量间的相似性和关系。这段话听起来很晦涩,但其实它的本质是特征性的收集,将事物所有的...
            0 0 1056
            分享
          • 什么是App测试?       IEEE定义:使用人工或自动化来测试某个程序,来验证它是否满足规定的需求或者实际结果和预期结果之间的差别。       App是基于移动互联网软件、及软硬件环境的应用软件。App测试就是要找出App中的缺陷,通过各种手段和测试工具,判断App系统是否满足预期标准。安装、卸载测试 验证 App 是否能正确安装、运行、卸载以及操作过程和操作前后对系统资源的使用情况。 1 、安装 1)软件在不同操作系...
            0 0 985
            分享
      • 51testing软件测试圈微信