Skip to content

群晖NAS使用GitServer套件建立Git服务器

1. 业务场景

  1. 建立个人私有代码仓库
  2. 将日常开发的项目进行简单的上传
  3. 缺点: 代码仓库只可管理员(nas管理)创建并初始化

2. 安装Git Server套件

  1. 打开套件中心, 搜索"Git Server"套件, 进行下载安装

  2. 安装完成后, 打开, 设置一个或多个用户作为使用git, 可以新建一个用户, 也可以用现有用户

  3. 创建一个文件夹作为git仓库, 建议创建顶级目录, 如控制面板->新增->共享文件夹"GitRepository"(名字随意起, 优雅即可)

  4. 新增一个群组"git", 便于进行权限管理, 将用户加入群组后, 用户继承群组的权限. 比如项目A的协作开发, 群组gita有项目A的读写权限, 其他用户只需要加入gita群组即可, 这里我直接"git"群组设置顶级仓库读写, 并将我的账号添加至"git"群组

  5. 控制面板开启ssh

  6. 使用xshell等软件远程连接nas终端

  7. bash
    # 1. 进入预设的仓库
    cd /volume1/GitRepository
    # 2. 创建项目(代码仓库1, 此步骤可在nas管理面板完成, 新建文件夹my-project.git)
    mkdir my-project.git
    # 3. 初始化git仓库, 以便于客户端可以进行git clone push等操作
    git init --bare
    # 4. 不能使用git init初始化一个非裸仓库, 非裸仓库不允许直接推送代码, 需要先检出, 这不利于我们将本地已有的项目直接进行远程推送
  8. 在 Git 中,git init --bare 命令用于创建一个裸仓库(Bare Repository),这种仓库没有工作目录(即没有可视化的文件树),仅用于存储版本历史和协作共享。以下是它的核心概念和使用场景

    特性普通仓库 (git init)裸仓库 (git init --bare)
    工作目录✅ 包含工作文件(可编辑)无工作目录(仅存储 Git 对象)
    用途本地开发、修改代码作为中央仓库,供多人推送/拉取代码
    文件结构包含 .git 文件夹和项目文件仅包含 .git 文件夹的内容
    直接操作可提交、修改文件不可直接修改文件(只能通过推送)
    • 生成的 my-project.git 目录包含 Git 的核心对象(如 HEAD, config, objects, refs 等),但没有实际代码文件。
    • 裸仓库不支持直接查看代码, 只能进行推送拉取
    • 非裸仓库会拒绝推送, 因为默认情况下,Git不允许向非裸仓库的当前检出的分支推送更改
  9. 仓库建立完成, 仓库地址:

    bash
    # username为使用者用户名, ip为登录nas的ip, 使用此url可以直接clone本仓库
    ssh://username@ip/volume1/GitRepository/my-project.git

3. 本地克隆仓库, 进行项目编写

  1. 本地创建一个工作目录用于开发工作workspace

  2. 在workspace工作目录下, 打开git bash

  3. 使用git clone命令, 进行仓库获取, 运行后会在workspace下新建一个名为my-project的项目

    bash
    git clone ssh://username@ip/volume1/GitRepository/my-project.git
  4. 可使用命令 git remote -v 查看远程仓库地址

    bash
    git remote -v

4. 使用IDEA现有项目, 进行远程推送

IDEA将现有项目推送至群晖GitServer.md

5. 常见问题

Q:普通仓库如何转换为裸仓库?

  • 手动修改配置:

    bash
    cd my-repo
    git config --bool core.bare true
    mv .git/* ./   # 移动 .git 内容到根目录
    rm -rf .git    # 删除原 .git 文件夹(可选)

Q:裸仓库如何备份?

  • 直接复制整个裸仓库目录,或使用 git bundle 打包。

上次更新于:

本站已运行: