git管理代码,真香
在团队协作开发中,将代码集中存放在服务器上,可以提升代码管理和备份的效率,同时便于团队成员通过版本控制工具(如 Git)协同开发。对于非开源项目,可以选择在自己的服务器上搭建 Git 服务,而不依赖 GitHub、GitLab 等第三方平台。
一、安装 Git 并配置 Git 用户
1. 在服务器上安装 Git
以 CentOS 为例,可以通过以下命令安装 Git:
1 | yum install git -y |
如果使用的是其他 Linux 发行版,请根据系统包管理工具选择适合的安装命令,例如:
- Ubuntu/Debian:
apt install git
- Fedora:
dnf install git
2. 创建一个专门的 Git 用户
为了方便管理代码,建议创建一个专门的用户账户,用于管理 Git 仓库:
1 | useradd git |
此用户将用于 SSH 登录和仓库管理。
3. 禁止 Git 用户登录 Shell
为了提升安全性,可以设置 Git 用户无法登录 Shell,只允许其使用 Git 服务:
1 | vim /etc/passwd |
找到 git 用户对应的行,将最后的 Shell 修改为 /bin/git-shell
,如下所示:
1 | git:x:1001:1001::/home/git:/bin/git-shell |
这样,Git 用户只能通过 SSH 使用 Git 服务,无法直接登录服务器。
二、创建裸仓库
裸仓库是没有工作区的 Git 仓库,专门用于代码共享和版本管理。以下是创建步骤:
1 | # 初始化裸仓库 |
裸仓库通常以 .git
为后缀,以区分普通的工作区仓库。project.git
是仓库名,可以根据项目实际情况修改为更合适的名称。
三、上传代码到服务器
以下提供两种将本地代码上传到服务器的方法:
1. 新建项目并添加远程仓库
1 | cd /path/to/code/project |
your-server-ip
替换为你的服务器 IP 地址。
2. 替换已有远程仓库
如果本地代码仓库已经绑定了其他远程仓库地址,可以使用以下命令更新远程地址:
1 | cd /path/to/code/project |
四、克隆代码到本地
如果团队成员需要克隆代码,可以使用以下命令:
1 | git clone git@your-server-ip:/home/git/project.git |
确保团队成员的公钥已添加到服务器(详见后续 SSH 密钥管理 部分),以便正常进行 SSH 认证。
五、配置 SSH 密钥
为了提升安全性并减少频繁输入密码的繁琐操作,建议配置 SSH 密钥。
1. 在本地生成密钥
在本地计算机上生成 SSH 密钥对:
1 | ssh-keygen -t rsa |
根据提示设置密钥存储路径(默认为 ~/.ssh/id_rsa
)并完成生成。
2. 将公钥上传到服务器
将生成的公钥文件上传到服务器的 Git 用户目录:
1 | scp ~/.ssh/id_rsa.pub git@your-server-ip:/home/git/.ssh/ |
3. 添加公钥到 authorized_keys
在服务器上,将上传的公钥内容追加到 authorized_keys
文件中:
1 | cat /home/git/.ssh/id_rsa.pub >> /home/git/.ssh/authorized_keys |
此后,用户可以通过 SSH 密钥直接访问服务器,无需输入密码。
注意:为了防止安全风险,请确保 authorized_keys
文件权限设置正确:
1 | chmod 600 /home/git/.ssh/authorized_keys |
六、配置 Git 钩子(Hooks)
Git 钩子是可以自动触发的脚本,用于在特定 Git 操作(如提交、推送)前后执行任务。常见的 Git 钩子有客户端钩子和服务端钩子。
服务端钩子:实现自动部署
以下是配置 post-receive
钩子,自动将推送到服务器的代码部署到指定目录的示例:
- 创建
post-receive
钩子文件:
1 | vim /home/git/project.git/hooks/post-receive |
- 写入以下脚本内容:
1 |
|
- 为钩子文件赋予执行权限:
1 | chmod +x /home/git/project.git/hooks/post-receive |
每次有人向服务器推送代码时,post-receive
钩子会自动将代码部署到 /var/www/project
。
七、常用 Git 操作命令
以下列出了一些常用的 Git 命令,便于快速参考:
1 | # 克隆远程仓库 |
八、补充说明和建议
- 分支管理:建议团队使用清晰的分支管理模型(如 Git Flow)来规范开发流程。
- 定期备份:定期备份裸仓库文件,以防服务器故障导致代码丢失。
- 钩子脚本:根据项目需求,合理使用 Git 钩子实现自动化任务,例如部署、测试等。
- 权限管理:严格管理用户权限,定期审查
authorized_keys
中的公钥,确保无未授权访问。
通过以上步骤,你可以在自己的服务器上快速搭建 Git 仓库,实现团队协作开发。如果有其他问题,欢迎留言讨论! 😊