# 我实践:搭建轻量git服务器的两个方案

我实践:搭建轻量git服务器的两个方案


我们一般都是用gitlab来搭建git服务器的,功能强大,对于企业是没有问题的,如果是你需要在云服务器上搭建一个自己用的git服务器,那么这个就太重了(也太贵,内存至少需要4G),其实我们可以用git搭建一个超轻量的服务器共个人使用,非常简单方便,当然你也可以用git+Gitolite搭建适合小团队或个人使用的轻量服务器(无web端),也非常简单方便,这两种方式我分别尝试一下

个人推荐:个人使用git+Gitolite搭建的git服务器使用起来更方便

1 用git搭建超轻量的git服务器

这种方式无法分配权限,只适合个人使用。

参考:
https://www.liaoxuefeng.com/wiki/896043488029600/899998870925664

https://git-scm.com/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E5%9C%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E6%90%AD%E5%BB%BA-Git # Chapters ▾ 2nd Edition里有最完整的git使用手册

找一台干净的服务器,我这里用的是CentOS 7,干

1.1 服务器端安装软件:

[root@v-192-168-11-147-nginx ~]# yum install git -y
输出...略

1.2 服务器端添加用户

git服务器运行在git账户下(也可以其他账户,但我认为你不会这么干)

[root@v-192-168-11-147-nginx ~]# useradd git

1.3 服务器端设置免密登录(用密码登录则不需要)

[root@v-192-168-11-147-nginx ~]# su - git
[git@v-192-168-11-147-nginx ~]$ mkdir .ssh
[git@v-192-168-11-147-nginx ~]$ chmod 700 .ssh/
[git@v-192-168-11-147-nginx ~]$ touch .ssh/authorized_keys
[git@v-192-168-11-147-nginx ~]$ chmod 600  .ssh/authorized_keys
[git@v-192-168-11-147-nginx ~]$ cat  .ssh/authorized_keys         #--- 将用户的sshkey公钥粘贴到里面(需要用户端生成,方法略),如果有多个用户,可以以继续添加
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABfg58LybOUaG7A+B6JMcNRR5+xQxL1EFfbqnGYPhyQZ2BXenlfhodLFICSaIV0SDIxVDqt7q4mbPPUhoDt+2pKXRPw1TDGQJ2rraLa384kiaZrs96OXJ9VxjYm7oKPuVnWh6KaytlIT8bfklNaSKRqUj1idOd9ala7R21QYFCJ2CaxByqoE+0GMXnKL24eMx4kZO40l6i6/4fdgfOxAPukwimuwYaxGnkOra3qnjgZkJt1hzlyb/ITEQXSccbjO/LCaC1xYm0LYDWWp13htVSBzo8V75kzceolsdkfssefiobfa5vLi2qhmrkKK9Rl kevin@kevin-Think

1.4 服务器端创建git服务器base目录

创建base目录方便管理,非必须

[git@v-192-168-11-147-nginx ~]$ mkdir  git_repos
[git@v-192-168-11-147-nginx ~]$ cd git_repos/

1.5 服务器端创建项目仓库

[git@v-192-168-11-147-nginx git_repos]$ git init  --bare  my_project.git        #--- --bare 用于服务器端的仓库初始化参数,这会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git
Initialized empty Git repository in /home/git/git_repos/my_project.git/
[git@v-192-168-11-147-nginx git_repos]$ 
[git@v-192-168-11-147-nginx git_repos]$ ll  my_project.git
total 12
drwxrwxr-x 2 git git   6 Sep  1 09:23 branches
-rw-rw-r-- 1 git git  66 Sep  1 09:23 config
-rw-rw-r-- 1 git git  73 Sep  1 09:23 description
-rw-rw-r-- 1 git git  23 Sep  1 09:23 HEAD
drwxrwxr-x 2 git git 242 Sep  1 09:23 hooks
drwxrwxr-x 2 git git  21 Sep  1 09:23 info
drwxrwxr-x 4 git git  30 Sep  1 09:23 objects
drwxrwxr-x 4 git git  31 Sep  1 09:23 refs

如果要多个仓库,则按相同的方式创建,至此服务器端搭建基本完成

1.6 用户端测试(ubuntu)

创建自己的sshkey,将公钥写入到服务器端~/.ssh/authorized_keys文件中(第3步)
linux下,在terminal中运行ssh-keygen即可,windows下自己百度

# 安装git
^_^ kevin@TM1701-b38cbc23:~$ sudo apt install git -y
输出...略

# 我这里测试建了个临时目录
^_^ kevin@TM1701-b38cbc23:~$ cd disk2/tmp
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp$
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp$ git clone  git@192.168.11.147:git_repos/my_project.git
正克隆到 'my_project'...
warning: 您似乎克隆了一个空仓库。

^_^ kevin@TM1701-b38cbc23:~/disk2/tmp$ cat my_project/.git/config 
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[remote "origin"]
	url = git@192.168.11.147:git_repos/my_project.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master

^_^ kevin@TM1701-b38cbc23:~/disk2/tmp$ cd my_project/
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp/my_project$ ll
总用量 12
drwxrwxr-x 3 kevin kevin 4096 91 09:43 ./
drwxrwxr-x 3 kevin kevin 4096 91 09:43 ../
drwxrwxr-x 7 kevin kevin 4096 91 09:43 .git/
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp/my_project$ touch README.md
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp/my_project$ git add .
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp/my_project$ git status
位于分支 master

尚无提交

要提交的变更:
  (使用 "git rm --cached <文件>..." 以取消暂存)
	新文件:   README.md

^_^ kevin@TM1701-b38cbc23:~/disk2/tmp/my_project$ git commit -m '1'
[master (根提交) de6ce8a] 1
 1 file changed, 2 insertions(+)
 create mode 100644 README.md
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp/my_project$ git push
枚举对象中: 3, 完成.
对象计数中: 100% (3/3), 完成.
写入对象中: 100% (3/3), 205 字节 | 205.00 KiB/s, 完成.
总共 3 (差异 0),复用 0 (差异 0)
To 192.168.11.147:git_repos/my_project.git
 * [new branch]      master -> master

完美

1.7 服务器端安全设置

**参考: https://git-scm.com/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E9%85%8D%E7%BD%AE%E6%9C%8D%E5%8A%A1%E5%99%A8 **

出于安全考虑,第二步创建的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每次一登录就自动退出。
也可以在terminal中运行chsh -s /usr/bin/git-shell git实现上面的更改

此时,用户仍可通过 SSH 端口转发来访问任何可达的 git 服务器。 如果你想要避免它,可编辑 authorized_keys 文件并在所有想要限制的公钥之前添加以下选项:

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty

其结果如下:

$ cat ~/.ssh/authorized_keys
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4LojG6rs6h
PB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4kYjh6541N
YsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9EzSdfd8AcC
IicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myivO7TCUSBd
LQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPqdAv8JggJ
ICUvax2T9va5 gsg-keypair

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDEwENNMomTboYI+LJieaAY16qiXiH3wuvENhBG...

现在,网络相关的 Git 命令依然能够正常工作,但是开发者用户已经无法得到一个普通 shell 了。

1.8 git-shell的高级用法

我也不会,请参考:

https://www.cnblogs.com/NoCirc1e/p/16275616.html
man git-shell

2 用Gitolite搭建轻量git服务器

这种方式,可以为用户分配权限,但没有web界面,适合个人或小团队使用

官方文档:
https://github.com/sitaramc/gitolite

找一台干净的服务器,我这里用的是CentOS 7,干

2.1 服务器端安装基础软件

[root@v-192-168-11-147-nginx ~]# yum install  git  perl-Data-Dumper -y
输出...略

2.2 服务器端安装gitolite

[root@v-192-168-11-147-nginx ~]# su - git
[git@v-192-168-11-147-nginx ~]$
[git@v-192-168-11-147-nginx ~]$ git clone https://github.com/sitaramc/gitolite
Cloning into 'gitolite'...
remote: Enumerating objects: 9718, done.
remote: Counting objects: 100% (12/12), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 9718 (delta 1), reused 4 (delta 1), pack-reused 9706
Receiving objects: 100% (9718/9718), 3.04 MiB | 173.00 KiB/s, done.
Resolving deltas: 100% (6027/6027), done.
[git@v-192-168-11-147-nginx ~]$ 
[git@v-192-168-11-147-nginx ~]$ mkdir -p $HOME/bin
[git@v-192-168-11-147-nginx ~]$ 
[git@v-192-168-11-147-nginx ~]$ ll
total 0
drwxrwxr-x 2 git git   6 Sep  2 13:47 bin
drwxrwxr-x 6 git git 258 Sep  2 13:47 gitolite

[git@v-192-168-11-147-nginx ~]$ gitolite/install -to $HOME/bin
[git@v-192-168-11-147-nginx ~]$ 
[git@v-192-168-11-147-nginx ~]$ ll bin/
total 24
drwxrwxr-x 2 git git 4096 Sep  2 13:47 commands
-rwxrwxr-x 1 git git 3292 Sep  2 13:47 gitolite
-rwxrwxr-x 1 git git 9023 Sep  2 13:47 gitolite-shell
drwxrwxr-x 3 git git   22 Sep  2 13:47 lib
drwxrwxr-x 2 git git   92 Sep  2 13:47 syntactic-sugar
drwxrwxr-x 3 git git  166 Sep  2 13:47 triggers
-rw-rw-r-- 1 git git   19 Sep  2 13:54 VERSION
drwxrwxr-x 2 git git  174 Sep  2 13:47 VREF

2.3 服务器端设置管理员

#--- 假设git管理员的名字为kevin,需提前生成sshkey,将sshkey公钥保存到服务器路径下,比如~/kevin.pub(用户名作为文件名,扩展名为pub)
[git@v-192-168-11-147-nginx ~]$ ll 
total 0
drwxrwxr-x 2 git git   6 Sep  2 13:47 bin
drwxrwxr-x 6 git git 258 Sep  2 13:47 gitolite
-rw-rw-r-- 1 git git  66 Sep  2 09:23 kevin.pub     #--- 这个
[git@v-192-168-11-147-nginx ~]$ 
[git@v-192-168-11-147-nginx ~]$ 
[git@v-192-168-11-147-nginx ~]$ gitolite setup -pk kevin.pub     #--- 设置管理员
Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
Initialized empty Git repository in /home/git/repositories/testing.git/
WARNING: /home/git/.ssh/authorized_keys missing; creating a new one
    (this is normal on a brand new install)

服务器端安装完成

2.4 管理员PC上设置用户权限

需要预先安装git,略

^_^ kevin@TM1701-b38cbc23:~/disk2/tmp$ git clone  git@192.168.11.147:gitolite-admin
正克隆到 'gitolite-admin'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
接收对象中: 100% (6/6), 完成.
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp$ 
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp$ ll
总用量 16
drwxrwxr-x  4 kevin kevin 4096 92 14:01 ./
drwxr-xr-x 21 kevin kevin 4096 92 09:12 ../
drwxrwxr-x  5 kevin kevin 4096 92 14:01 gitolite-admin/
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp$ 
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp$ cd gitolite-admin/
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp/gitolite-admin$ ll
总用量 20
drwxrwxr-x 5 kevin kevin 4096 92 14:01 ./
drwxrwxr-x 4 kevin kevin 4096 92 14:01 ../
drwxrwxr-x 2 kevin kevin 4096 92 14:01 conf/
drwxrwxr-x 8 kevin kevin 4096 92 14:01 .git/
drwxrwxr-x 2 kevin kevin 4096 92 14:01 keydir/      #--- 这是用户公钥所在目录,用户文件名为【用户名.pub】,文件内容为用户的公钥(公钥由用户自己生成,比如linux用ssh-keygen生成)

^_^ kevin@TM1701-b38cbc23:~/disk2/tmp/gitolite-admin$ ll  keydir/
总用量 12
drwxrwxr-x 2 kevin kevin 4096 92 14:01 ./
drwxrwxr-x 5 kevin kevin 4096 92 14:01 ../
-rw-rw-r-- 1 kevin kevin  407 92 14:01 kevin.pub    #--- 用户kevin的sshkey公钥文件,如果添加新用户,把用户的公钥文件放到这里,并命名为【用户名.pub】
-rw-rw-r-- 1 kevin kevin  407 92 14:01 zzxia.pub    #--- 新用户zzxia

^_^ kevin@TM1701-b38cbc23:~/disk2/tmp/gitolite-admin$ ll conf/
总用量 12
drwxrwxr-x 2 kevin kevin 4096 92 14:28 ./
drwxrwxr-x 5 kevin kevin 4096 92 14:01 ../
-rw-rw-r-- 1 kevin kevin  112 92 14:28 gitolite.conf        #--- 这是用户权限配置文件
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp/gitolite-admin$ cat conf/gitolite.conf   #--- 这是前面设置完管理员之后的配置文件内容
repo gitolite-admin
    RW+     =   kevin

repo testing
    RW+     =   @all

# 创建新仓库及授权,修改此文件即可,比如添加仓库【my1】,授权zzxia完全权限,jack读写权限,授权tom只读权限(用户先建好)
repo my1
    RW+     =   zzxia
    RW      =   jack
    R       =   tom

完成仓库新建与用户授权后,将代码提交到仓库即可:

^_^ kevin@TM1701-b38cbc23:~/disk2/tmp/gitolite-admin$ git add .
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp/gitolite-admin$ git commit -m 'update'
[master ba4c539] update 2
 1 file changed, 1 insertion(+), 1 deletion(-)
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp/gitolite-admin$ git push
枚举对象中: 7, 完成.
对象计数中: 100% (7/7), 完成.
使用 8 个线程进行压缩
压缩对象中: 100% (3/3), 完成.
写入对象中: 100% (4/4), 347 字节 | 347.00 KiB/s, 完成.
总共 4 (差异 1),复用 0 (差异 0)
To 192.168.11.147:gitolite-admin
   f8cc758..ba4c539  master -> master

OK,权限设置完成

2.5 用户端测试(ubuntu)

创建自己的sshkey,将公钥写入到服务器端~/.ssh/authorized_keys文件中(第3步)
linux下,在terminal中运行ssh-keygen即可,windows下自己百度

# 安装git
^_^ kevin@TM1701-b38cbc23:~$ sudo apt install git -y
输出...略

^_^ kevin@TM1701-b38cbc23:~/disk2/tmp$ git clone  git@192.168.11.147:my1
正克隆到 'my1'...
warning: 您似乎克隆了一个空仓库。

^_^ kevin@TM1701-b38cbc23:~/disk2/tmp$ ll
总用量 20
drwxrwxr-x  5 kevin kevin 4096 92 14:08 ./
drwxr-xr-x 21 kevin kevin 4096 92 09:12 ../
drwxrwxr-x  3 kevin kevin 4096 92 14:08 my1/
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp$ cat my1/.git/config 
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[remote "origin"]
	url = git@192.168.11.147:my1
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp$ 
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp$ cd my1/
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp/my1$ git status
位于分支 master

尚无提交

无文件要提交(创建/拷贝文件并使用 "git add" 建立跟踪)
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp/my1$ touch  111111111
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp/my1$ git add .
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp/my1$ git commit -m '11'
[master (根提交) 93e98fd] 11
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 111111111
^_^ kevin@TM1701-b38cbc23:~/disk2/tmp/my1$ git push
枚举对象中: 3, 完成.
对象计数中: 100% (3/3), 完成.
写入对象中: 100% (3/3), 193 字节 | 193.00 KiB/s, 完成.
总共 3 (差异 0),复用 0 (差异 0)
To 192.168.11.147:my1
 * [new branch]      master -> master

完美

2.6 复杂权限控制

  • 基于分支、tag的权限控制

gitolite可以控制权限到分支及tag的粒度,甚至更为复杂的正则规则,具体请看github官方网站【https://github.com/sitaramc/gitolite】,下面摘抄一些:

略...
repo foo
    RW+                     =   alice
    -   master              =   bob
    -   refs/tags/v[0-9]    =   bob
    RW                      =   bob
    RW  refs/tags/v[0-9]    =   carol
    R                       =   dave
略...
# 示例规则所说的内容:
# alice 可以对任何分支或标签做任何事情——创建、推送、删除、回滚/覆盖等。
# bob   可以创建或快进推送名称不以“master”开头的任何分支,并创建名称不以“v”+digit 开头的任何标签。
# carol 可以创建名称以“v”+digit 开头的标签。
# dave  可以克隆/获取。
  • 基于组的授权

Gitolite 允许您为方便起见对用户或存储库进行分组。这是一个创建两组用户的示例:

@staff      =   alice bob carol
@interns    =   ashok

repo secret
    RW      =   @staff

repo foss
    RW+     =   @staff
    RW      =   @interns

您还可以在其他组名中使用组名:

@all-devs   =   @staff @interns
  • 最后,@all 是一个特殊的组名,如果您真正的意思是“所有 repos”或“所有用户”,通常使用起来很方便。

3 git clone地址的一些写法

参考git clone --help后的一些尝试,这些尝试可以让你更深层次的理解git原理

以下写法都是可行的:

# 本地仓库克隆
git clone  git_repos/my_project.git   ./my
git clone  /home/git/git_repos/my_project.git   ./my
git clone  file:///home/git/git_repos/my_project.git   ./my
# 可以用`git init --bare  my_project.git`命令初始化一个本地仓库

# 远程仓库之git方式克隆
git clone  git@192.168.11.147:git_repos/my_project.git
git clone  git@192.168.11.147:~/git_repos/my_project.git
git clone  git@192.168.11.147:/~/git_repos/my_project.git
git clone  git@192.168.11.147:/home/git/git_repos/my_project.git
# 注:
# 必须有【:】
# 在第一个冒号后面没有斜杠时,是相对于git用户的home路径

# # 远程仓库之ssh方式克隆
git clone  ssh://git@192.168.11.147/~/git_repos/my_project.git
git clone  ssh://git@192.168.11.147:22/~/git_repos/my_project.git
git clone  ssh://git@192.168.11.147/home/git/git_repos/my_project.git
git clone  ssh://git@192.168.11.147:22/home/git/git_repos/my_project.git
# 注:
# 不一定要【:】
# 只能使用绝对路径

了解的越多,越觉得Linus的伟大

4 最后

img

爱你!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 搭建一个Git服务器是一个相对容易的过程,以下是一个简单的步骤: 1. 获取一个Linux操作系统,如Ubuntu或CentOS。确保你具有root权限。 2. 在服务器上安装Git软件。使用以下命令在终端中运行: 对于Ubuntu系统: ``` sudo apt-get update sudo apt-get install git ``` 对于CentOS系统: ``` sudo yum update sudo yum install git ``` 3. 创建一个新用户来管理Git服务器。可以使用以下命令创建一个名为"git"的用户: ``` sudo adduser git ``` 设置一个密码并记录下来。 4. 切换到git用户。可以使用以下命令: ``` su git ``` 5. 创建一个专门用于存储Git仓库的目录。可以使用以下命令来创建目录并进入该目录: ``` mkdir gitrepo cd gitrepo ``` 6. 初始化Git仓库。使用以下命令: ``` git init --bare ``` 7. 退出git用户并返回root用户。 ``` exit ``` 8. 配置SSH认证。使用以下命令编辑SSH配置文件: ``` sudo nano /etc/ssh/sshd_config ``` 找到以下行并取消注释修改为"yes",确保SSH密钥认证是启用的: ``` PubkeyAuthentication yes ``` 保存并退出。 9. 重启SSH服务以使更改生效。使用以下命令: 对于Ubuntu系统: ``` sudo service ssh restart ``` 对于CentOS系统: ``` sudo systemctl restart sshd ``` 10. 现在你的Git服务器已经搭建完成。你可以通过用Git客户端克隆服务器上的仓库,例如: ``` git clone git@your_server_ip:/path/to/gitrepo.git ``` 替换"your_server_ip"为你的服务器IP地址,"/path/to/gitrepo.git"为你创建的Git仓库的路径。 这些步骤将让你能够在你的Linux服务器搭建一个Git仓库,并开始使用。请注意,这只是最基本的过程,你还可以通过配置Git的其他特性来增强服务器的功能。 ### 回答2: 搭建一个Git服务器是使用Linux操作系统的常见任务之一。以下是一个简单的步骤指导,帮助你在Linux搭建一个Git服务器。 1. 首先,在你的Linux服务器上安装Git软件。可以使用系统的包管理器来安装,比如在Ubuntu上可以使用以下命令:`sudo apt-get install git`。 2. 创建一个用于存储Git仓库的目录。可以选择在服务器的任意位置创建,比如 `/opt/git`。使用以下命令创建目录:`sudo mkdir /opt/git`。 3. 通过以下命令进入该目录:`cd /opt/git`。 4. 初始化一个裸仓库(Bare Repository),这是一个没有工作目录的纯粹的Git仓库,用于充当服务器上的中央仓库。使用以下命令创建裸仓库:`sudo git init --bare your_repository_name.git`。这里的`your_repository_name.git`是你想要创建的仓库的名称。 5. 设置仓库的权限。为了安全起见,只有具有权限的用户才能访问和推送到仓库。可以使用以下命令设置权限:`sudo chown -R git:git your_repository_name.git`。这里的`your_repository_name.git`是你刚才创建的仓库的名称。 6. 配置Git服务器,并启用SSH访问。编辑Git服务器的SSH配置文件,可以使用以下命令:`sudo nano /etc/ssh/sshd_config`。在配置文件中添加一行:`AllowUsers git`,然后保存并关闭文件。 7. 重启SSH服务以使配置生效:`sudo service sshd restart`。 8. 现在,可以通过SSH协议克隆或推送到你的Git服务器。例如,使用以下命令克隆仓库:`git clone git@your_server_ip:/opt/git/your_repository_name.git`。请记得将`your_server_ip`替换为你的服务器的IP地址,`your_repository_name.git`替换为你刚才创建的仓库的名称。 通过按照上述步骤,在Linux搭建一个Git服务器并完成相关配置,你就可以在服务器上管理和共享你的Git仓库了。 ### 回答3: 要搭建一个基于Linux操作系统的Git服务器,需要以下步骤: 1. 安装Linux操作系统:在一台服务器上安装Linux系统,可以选择Ubuntu、CentOS等常见的发行版。 2. 安装Git软件:使用Linux系统的包管理器,如apt-get(Ubuntu)或yum(CentOS),安装Git软件。 3. 创建Git用户和组:通过命令行创建一个Git用户和一个属于该用户的组,用于管理Git仓库的访问权限。 4. 安装SSH服务:Git使用SSH协议进行远程仓库的访问和通信。确保安装并启动SSH服务,配置允许Git用户进行SSH访问。 5. 切换到Git用户:通过命令行切换到Git用户,以执行后续的操作。 6. 创建Git仓库:使用Git命令创建一个新的仓库,可以使用"git init"命令来初始化一个空的仓库。 7. 配置Git仓库:通过"git config"命令配置Git仓库的参数,例如仓库名称、用户名、邮箱等。 8. 设置Git远程访问:通过SSH协议设置Git远程访问,提供SSH公钥给用户,以便他们可以通过SSH协议访问Git仓库。 9. 设置Git核心服务器钩子:在Git服务器上配置钩子,可以在提交代码或推送代码等操作时触发一些自定义的操作。 10. 测试Git服务器:确保配置正确且服务器正常运行后,使用Git命令测试访问Git仓库的各种操作,如克隆、提交、推送等。 通过以上步骤,就可以在Linux系统上成功搭建一个Git服务器,为团队提供代码托管和版本控制的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值