Home 搭建Git服务端及同步到指定目录
Post
Cancel

搭建Git服务端及同步到指定目录

引言

使用Git可以更好的和朋友一起管理代码,也便于同步代码。由于我比较喜欢静态网站,因此使用Git同步网页文件很是实用

安装Git

登录ROOT账户,依次输入以下命令

1
2
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
yum install git

创建用户

创建一个Git用户组和用户,用于运行Git服务

1
2
groupadd git
useradd git -g git

公钥获取

此部分为自己电脑的公钥,以Widows为例

%UserProfile%/.ssh/目录下id_rsa.pub文件存储

如若没有此文件,打开cmd运行ssh-keygen命令会自动生成

导入公钥

将待导入的公钥导入/home/git/.ssh/authorized_keys文件里,一行一个。 若没有该文件,则创建一个

1
2
3
4
5
cd /home/git/
mkdir .ssh
chmod 755 .ssh
touch .ssh/authorized_keys
chmod 644 .ssh/authorized_keys

然后使用vi或vim命令将公钥导入,使用参考:vim文本编辑

初始化Git仓库

选定一个目录作为Git仓库,假设为/home/gitrepo/repo.git

1
2
3
4
5
cd /home
mkdir gitrepo
chown git:git gitrepo
cd gitrepo
git init --bare repo.git

以上命令Git创建一个空仓库,服务器上的Git仓库通常都以.git结尾。然后,把仓库所属用户改为git:

1
chown -R git:git runoob.git

克隆仓库

1
2
3
git clone git@您的IP:仓库目录
// 例如
git clone [email protected]:/home/gitrepo/repo.git

同步目录

自动同步功能用到的是Git的钩子(hook)功能

进入仓库目录/home/gitrepo/repo.git

1
2
cd /home/gitrepo/repo.git
cd hooks

创建并编辑文件post-receive

1
vi post-receive

在该文件写入以下内容

1
2
#!/bin/sh
git --work-tree=同步到的目录 --git-dir=仓库位置 checkout -f

例如

1
2
#!/bin/sh
git --work-tree=/home/www/hexo --git-dir=/home/gitrepo/repo.git checkout -f

然后设置该文件读写权限

1
chmod +x post-receive

改变repo.git目录的拥有者为git用户

1
chown -R git:git /home/gitrepo/repo.git

更新代码

如果你可以确定什么都没有改过只是更新本地代码,直接使用

1
git pull

正规流程

1
2
3
4
5
6
7
8
9
// 查看本地分支文件信息,确保更新时不产生冲突
git status
// 若文件有修改,可以还原到最初状态; 若文件需要更新到服务器上,应该先merge到服务器,再更新到本地
git checkout – [file name]
// 查看当前分支情况
git branch
// 若分支为本地分支,则需切换到服务器的远程分支
git checkout remote branch
git pull

其他命令

1
2
3
4
git branch // 看看分支
git checkout aaa // 切换分支aaa
git branck aaa // 创建aaa分支
git chechout -b aaa // 本地创建 aaa分支,同时切换到aaa分支。只有提交的时候才会在服务端上创建一个分支

禁用git用户的shell登录权限

出于安全考虑,我们要让 git 用户不能通过 shell 登录。可以编辑/etc/passwd来实现

1
vi /etc/passwd

1
git:x:1004:1004::/home/git:/bin/bash

改为

1
git:x:1004:1004::/home/git:/usr/bin/git-shell

这样 git 用户可以通过 ssh 正常使用 git,但是无法登录 sehll

参考文章

Linux chown 命令-菜鸟教程

Git 服务器搭建-菜鸟教程

Git - 生成 SSH 公钥

SSH key的介绍与在Git中的使用 - 简书

Git - 在服务器上搭建 Git

git 更新代码到本地_ftToday的博客-CSDN博客

如何在服务器上搭建hexo博客-阿里云开发者社区

Linux权限详解(chmod、600、644、700、711、755、777、4755、6755、7755)_林20的博客-CSDN博客

详细解析Linux /etc/passwd文件 - Jtianlin - 博客园

This post is licensed under CC BY 4.0 by the author.

博客视频外链引用

Github 拒绝访问Connection refused