创建局域网Git服务器

本文提供的方法适用于小型团队在局域网内通过git协同编码,基本配置简便易行,还额外提供基于SSH免密码提交代码的扩展方案。基本原理可参见文末总结。

一. 基本步骤

第1步:安装 Linux,安装 Git

此处省略具体操作步骤。

第2步:创建 git 用户

在Linux系统内以管理员权限(root)执行如下命令创建Linux用户:

adduser git

此命令执行过程中会提示输入新用户的 登录密码,同时自动创建用户主目录/home/git,以及执行其他必要的工作。

该用户不一定非叫git,任意合法名称都行,例如 liigogit 等等,当然后续操作命令也要相应地修改,最终仓库地址也有所不同(仓库地址以此用户名开头)。

网上有方法禁止git用户登录SSH。我认为这一步是可选的。

第3步:创建 git 仓库

使用 git 用户登录Linux系统,在用户主目录 /home/git 内执行如下命令创建git仓库:

git init --bare myrepo.git

裸仓库(–bare)目录名称以后缀 .git 结尾是一种习惯性约定,并非必需。

该仓库本地目录是 /home/git/myrepo.git,或者 ~/myrepo.git,这个毫无疑问。

该仓库 远程目录 可以是以下任意一个:

  • git@192.168.0.2:/home/git/myrepo.git
  • git@192.168.0.2:~/myrepo.git
  • git@192.168.0.2:myrepo.git

咱们通常使用最后一个,因为它最简洁。

注意其中包含了用户名、IP地址、本地目录等信息;注意符号 @: 都是必不可少的。

第4步:客户端克隆 git 仓库

Git客户端可通过如下命令克隆仓库:

git clone git@192.168.0.2:myrepo.git

用户名git已经包含在仓库远程目录内,用户密码就是在第2步创建git用户时设定的那个密码。克隆仓库需要输入密码。

第5步:客户端推送 git 仓库

执行 git push 等命令时要求输入密码,就是第2步创建git用户时设定的那个密码。

至此,基本配置步骤已经完成,基础功能可用。如需免密码推送Git功能,请继续阅读本文。

二. 配置SSH公钥免密码推送Git

经过以上5个步骤,Git服务器基本功能已经可用,但是至少还有两个缺点:

  • 需要向团队所有成员公开git用户的密码,不太安全
  • 每次推送仓库时都要输入git用户的密码,操作繁琐

下面为Linux系统的 git 用户配置 authorized_keys 文件,配置成功之后就无需公开其登录密码,推送时也无需输入密码,一并克服了两个缺点。

服务端配置文件 authorized_keys

使用 git 用户登录Linux,在其主目录 /home/git 内执行如下操作(无需管理员权限):

mkdir .ssh
chmod 700 .ssh
cd .ssh
touch authorized_keys
chmod 600 authorized_keys

LIIGO人云亦云注:SSH系统要求 .ssh 目录权限是700(drwx------),.ssh/authorized_keys 文件权限是600(-rw-------)。

然后编辑该文件 /home/git/.ssh/authorized_keys ,逐行输入团队各成员提供的公钥文件内容(下文介绍生成SSH公钥私钥的方法)。

20221019 补记:可以使用ssh-copy-id命令将本机内指定的公钥文件内容推送追加到远程主机指定用户的authorized_keys文件末尾,示例如下:

ssh-copy-id -i id_rsa.pub git@192.168.0.2

客户端生成SSH公钥密钥

Linux用户

Linux登录用户在任意目录下执行命令 ssh-keygen 连续按三次回车键即自动生成如下两个文件:

  • ~/.ssh/id_rsa
  • ~/.ssh/id_rsa.pub

其中 id_rsa 就是刚创建的密钥文件(此文件名和路径不得随意变动),id_rsa.pub 是公钥文件。

团队各成员分别将自己的公钥文件 id_rsa.pub 或其内容发给git用户管理员,让他写入服务端 authorized_keys 文件。

TortoiseGit 用户

Tortoise Git 用户可通过 PuTTYgen.exe 创建公钥密钥。具体方法是点击Generate按钮,随意滑动鼠标直至创建完成,生成的公钥文本显示在窗口上方多行只读编辑框内,复制其内容发送给git用户管理员,让他写入服务端 authorized_keys 文件。最后还要点击 Save private key 按钮保存密钥文件(*.ppk,Putty密钥文件,区别于OpenSSH密钥文件(id_rsa),但利用PuTTYgen.exe,前者可以导出后者)。还有一点要特别注意,通过 Tortoise Git 图形界面克隆仓库时需勾选"Load Putty key",并选定前面生成的Putty密钥文件(*.ppk)。至于Pageant.exe,不用管他,Tortoise Git会自动启动它并自动加载Putty密钥文件。

LIIGO多说一句,对于Github上的仓库,要应用公钥密钥,通过TortoiseGit克隆仓库时必须使用SSH地址(形如git@github.com:liigo/rust.git),而非HTTPS地址(形如https://github.com/liigo/rust.git)。Github网站仓库首页同时提供这两类链接(“Clone with SSH” VS “Clone with HTTPS”)。

三. 总结

服务器是开启了SSH服务的Linux系统,在其中创建名称为 git 的Linux用户(同时也是SSH登录用户)专用于管理Git仓库,仓库位于服务器本机目录 /home/git/name.git 内(name.git是目录名),仓库SSH地址即客户端克隆地址是 git@ip:name.git,Git克隆命令行是 git clone git@ip:name.git

在未配置SSH公钥的情况下,需要向仓库使用者公开 git 用户的登录密码,克隆(clone)/拉取(pull)/推送(push)等操作都需要输入该密码。在服务端配置好文件 /home/git/.ssh/authorized_keys 并录入各使用者SSH公钥后,就无需公开该登录密码,所有Git操作都不用输入密码。

前面的基本操作步骤都很简单,可以提供基本的Git服务;配置SSH公钥的操作相对复杂,但客户使用体验更好。

此方法的缺点是,不能有针对性的分别设置团队各成员的权限,所有人都能完全操控Git仓库。

可能有朋友产生疑问,团队所有成员共用一个git用户提交代码,还能分清代码是谁写的吗?当然能。Git客户端推送时携带了代码作者的姓名和邮件地址,都完整的体现在 git log 里面,这个无需担心。Github网站后端也是如此操作的,并无不妥。

<think>好的,我现在要帮用户介绍一下局域网Git。首先,我需要确认用户的需求是什么。他们可能是在一个没有互联网连接的环境下,或者希望内部团队协作时使用Git,所以需要了解如何在局域网搭建和使用Git仓库。 首先,我应该解释什么是局域网Git,也就是在本地网络中使用Git进行版本控制,不需要依赖互联网服务如GitHub或GitLab。这可能包括搭建本地Git服务器,或者使用共享文件夹等方式。 接下来,用户可能需要知道具体的步骤和方法。常见的局域网Git方案有几个:基于SSHGit服务器、使用Git Daemon、或者简单的共享文件夹。我需要逐一介绍这些方法,包括它们的优缺点和配置步骤。 比如,基于SSH的方法比较常见,用户可能已经熟悉SSH,所以设置起来相对容易。需要说明如何在服务器创建裸仓库,然后客户端如何克隆和推送。这里要注意权限问题,可能需要设置用户账户和SSH密钥。 然后是Git Daemon,这种方法适合只读访问,配置起来简单,但可能不够安全,适合内部测试或公开只读仓库。需要说明如何启动Git Daemon,并设置目录权限。 共享文件夹方法可能适合Windows用户,通过SMB或直接路径访问,但要注意文件锁的问题,可能不适合多人同时写入。需要提醒用户这种方法的局限性。 另外,可能还需要提到一些工具,比如GitWeb或者Gitea这样的自托管Git服务,可以在局域网内提供类似GitHub的界面,方便团队协作。但Gitea可能需要更多的配置,适合有一定经验的用户。 用户可能关心权限管理,比如如何控制不同成员的访问权限。基于SSH的话,可以通过系统账户和SSH密钥来管理,而Gitea这样的工具则提供更细粒度的权限控制。 需要提醒用户注意局域网内的备份策略,避免数据丢失,毕竟本地服务器没有云服务的冗余保障。同时,网络稳定性也很重要,确保仓库的可访问性。 最后,总结不同方案的适用场景,帮助用户根据团队规模和技术水平选择合适的方法。比如小团队可能适合共享文件夹或SSH,而大团队可能需要Gitea这样的工具。 在解释过程中,要保持语言简洁,步骤清晰,避免使用过于专业的术语,或者必要时解释术语。同时,检查是否有遗漏的常见问题,比如如何处理冲突,或者如何迁移现有的仓库到局域网环境。 可能还需要给出一些示例命令,比如创建裸仓库的命令,克隆仓库的命令,以及如何添加远程仓库。这些命令要用正确的格式,比如使用$...$包裹,独立公式用$$...$$,但根据用户给的系统指令,行内数学表达式需要用$...$,但这里可能更多是代码块,需要确认是否适用。不过用户提到的是数学表达式,所以可能代码块不需要特别处理,但需要确保LaTeX语法正确,比如如果有数学公式的话。不过在这个问题中,可能涉及到的代码示例更多是命令行,所以可能需要用代码块标记,但用户没有特别说明,所以可能需要根据平台的支持情况来处理。 总之,我需要结构清晰地分步骤介绍不同的方法,比较它们的优缺点,给出配置示例,并提醒注意事项,帮助用户顺利在局域网搭建Git环境。</think>### 局域网 Git 介绍与搭建指南 局域网 Git 是通过本地网络(非互联网)实现代码版本控制的方案,适合团队内部协作或离线环境使用。以下是关键步骤与常见方案: --- #### 一、核心概念 1. **本地 Git 仓库** 每个开发者拥有完整的代码历史,局域网内通过共享仓库实现同步。 2. **裸仓库(Bare Repository)** 无工作目录的纯仓库,用于中央存储,命名如 `project.git`,格式: ```bash $ git init --bare project.git ``` --- #### 二、常见搭建方案 ##### 方案 1:基于 SSH 协议(推荐) - **适用场景**:需读写权限控制的团队协作。 - **步骤**: 1. **服务器端**: ```bash # 创建裸仓库 $ mkdir -p /git-repos/project.git $ cd /git-repos/project.git $ git init --bare ``` 2. **客户端克隆与推送**: ```bash # 克隆仓库 $ git clone user@server-ip:/git-repos/project.git # 添加远程仓库 $ git remote add origin user@server-ip:/git-repos/project.git # 推送代码 $ git push origin main ``` - **权限管理**:通过系统用户账户和 SSH 密钥控制访问。 ##### 方案 2:Git Daemon(只读仓库) - **适用场景**:公开只读仓库(如内部文档)。 - **步骤**: 1. **服务器端启动服务**: ```bash $ git daemon --base-path=/git-repos --export-all --reuseaddr ``` 2. **客户端克隆**: ```bash $ git clone git://server-ip/project.git ``` ##### 方案 3:共享文件夹(快速简易) - **适用场景**:小团队临时协作(Windows/Linux 均支持)。 - **步骤**: 1. **共享目录**:将裸仓库放在网络共享路径(如 `\\server\git-repos\project.git`)。 2. **客户端操作**: ```bash # 直接克隆共享路径 $ git clone //server/git-repos/project.git ``` - **注意**:避免多人同时写入(可能引发文件锁冲突)。 ##### 方案 4:自托管 Git 服务(Gitea/GitLab) - **适用场景**:需 Web 界面和高级功能(如 Issue 跟踪)。 - **工具示例**: - **Gitea**:轻量级,适合中小团队。 - **GitLab**:功能全面,需更多资源。 - **部署步骤**: 1. 在局域网服务器安装 Docker。 2. 通过 Docker 快速部署 Gitea: ```bash $ docker run -d --name=gitea -p 3000:3000 -v /data/gitea:/data gitea/gitea ``` 3. 访问 `http://server-ip:3000` 完成初始化配置。 --- #### 三、权限管理对比 | 方案 | 读写控制 | 安全性 | 复杂度 | |--------------|----------|--------|--------| | SSH | ✔️ | 高 | 中 | | Git Daemon | ❌(只读)| 低 | 低 | | 共享文件夹 | ✔️ | 中 | 低 | | Gitea/GitLab | ✔️ | 高 | 高 | --- #### 四、注意事项 1. **备份策略**:定期备份裸仓库(如 `rsync` 或压缩存档)。 2. **网络稳定性**:确保局域网 IP 固定,避免地址变化导致连接中断。 3. **冲突处理**:多人协作时需规范分支管理(如 Git Flow)。 --- #### 五、总结 - **小团队/快速原型**:优先选择 **SSH** 或 **共享文件夹**。 - **中大型团队**:推荐 **Gitea** 提供完整协作功能。 - **只读场景**:使用 **Git Daemon** 简化部署。 通过上述方案,可高效搭建局域网 Git 环境,满足不同场景下的代码管理需求。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值