搭建 Git 服务器
要求:
- 了解 Linux 系统的用户管理
- 了解 Git 的使用
- 拥有公网 IP 的服务器
背景:
假设你正在进行一个项目开发, 并使用 Git 进行版本管理. 中途需要进行团队协作, 需要将当前项目的 Git 仓库进行通过服务器进行共享.
示例环境为 Linux 系统, 在路径
/home/Data/
下演示
克隆裸(bare)仓库:
首先, 要将当前的仓库上传到服务器, 方法随意, 假设上传到 /home/Data/rep
.
当前目录情况:
/home/Data:
.
└── rep
├── .git
│ ├── branches
│ ├── config
│ ├── description
│ ├── HEAD
│ ├── hooks
│ ├── info
│ ├── objects
│ ├── packed-refs
│ └── refs
└── initial_file
随后, 根据这个仓库克隆一个裸仓库用作共享.
# /home/Data
$ git clone --bare ./rep ./share
当前目录情况:
├── rep
│ ├── .git
│ └── initial_file
└── shared
├── branches
├── config
├── description
├── HEAD
├── hooks
├── info
├── objects
├── packed-refs
└── refs
可以看到, shared 目录下只有原来仓库 .git
下的文件, 没有工作目录, 这可能称之为裸(bare)仓库的原因.
这个仓库不能直接操作, 要在本地进行拉取后才能使用. 这个裸仓库作为一个信息中转站, 只保存提交记录, 而不保存具体的文件.
本地拉取该仓库后, 在本地进行开发, 提交, 然后将更新后的仓库提交到服务器, 服务器的裸仓库信息就会更新.
这些操作基于 ssh 连接.
本地操作:
本地首先要将仓库克隆下来:
# 服务器裸仓库路径是/home/Data/shared
# 假设可通过用户userA远程连接到服务器
$ git clone userA@remote_address:/home/Data/shared "rep"
该命令通过 ssh 在服务器登录用户 userA, remote_address
为服务器域名(或直接使用公网 IP).
冒号后面可指定端口, 如果服务器 ssh 连接不是使用默认端口的话.
随后接的即是裸仓库在服务器的路径. 显然, 如果 userA 对该目录无 r-x 权限, 是无法克隆的.
对于 shared 目录, userA 如果有 rwx 权限, 则自然可以进行拉取和推送, 无需额外设置.
若要实现仓库共享, 应对 shared 目录的权限设置为 775(与同用户组用户进行共享), 并将需要共享的用户加入该用户组, 即可实现仓库共享.
另外, 在文档中提到, 通过命令:
# /home/Data/shared $ git init --bare --shared
可以将仓库设置为共享, 自动将仓库所在目录权限设置为同组可写(g+w).
然而, 在服务端克隆裸仓库的时候, 似乎默认权限就是同组可写, 因此没有用上.
可能是设置问题?
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于