服务器上搭建git仓库与钩子hook的配置过程

 更新时间:2026年05月05日 10:51:32   作者:naruto227  
本文详细介绍了在阿里云服务器上搭建Git仓库的过程,包括创建Git用户组、修改文件权限、配置hook等步骤,并说明了如何在本地clone远程仓库及解决可能出现的问题的方法

服务器上的git目录下文件配置

本服务器是基于阿里云上的服务器,服务器上的web服务在/wwwroot/www目录下

ssh root/用户名@服务器地址,进入服务器
cd /home/git/  #进入git目录
git init --bare huang.git   #初始化一个git仓库

需要先在服务器上添加个Git用户组,并在git用户组里添加个git用户,后面的操作都是使用git这个用户身份操作的。因为我是root权限登录的,所以是root权限,这处必须要修改的。

chown -R git:git huang.git/

此时,git目录下的huang.git文件夹git用户组修改完毕,接下来是修改hook,此处不详述钩子的作用,这里只说明如何用,详细可以自己去查询了解。

钩子hook

进入刚创建的huang.git文件夹里的hooks文件夹中,里面有post-receive和post-update这两个文件(如果没有的话需要自己新建)

下面是配置好的post-receive里的文件内容:

#!/bin/sh  
#  
# An example hook script for the "post-receive" event.  
#  
# The "post-receive" script is run after receive-pack has accepted a pack  
# and the repository has been updated.  It is passed arguments in through  
# stdin in the form  
#  <oldrev> <newrev> <refname>  
# For example:  
#  aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master  
#  
# see contrib/hooks/ for a sample, or uncomment the next line and  
# rename the file to "post-receive".  
#. /usr/share/git-core/contrib/hooks/post-receive-email
# cd /wwwroot/www/你的项目文件名(这里为huang)  
cd /wwwroot/www/huang  
env -i git pull  

下面是配置好的post-update里的文件内容:

#!/bin/sh  
#  
# An example hook script for the "post-receive" event.  
#  
# The "post-receive" script is run after receive-pack has accepted a pack  
# and the repository has been updated.  It is passed arguments in through  
# stdin in the form  
#  <oldrev> <newrev> <refname>  
# For example:  
#  aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master  
#  
# see contrib/hooks/ for a sample, or uncomment the next line and  
# rename the file to "post-receive".  
#. /usr/share/git-core/contrib/hooks/post-receive-email  
cd /wwwroot/www/huang  
env -i git pull

web目录下文件配置

git目录下的文件配置完毕,接下来进入web目录/wwwroot/www。将git目录下刚创建的空仓库的内容clone过来,命令如下:

ls -la 

chown -R git:git huang/

本地clone远程项目

到此,服务器上的仓库文件配置完毕。在本地clone远程服务器上的空仓库,命令如下:

git clone git@服务器地址:huang.git

进入该项目文件夹,添加代码文件

git add .
git commit -m "1"
git push

这个时候git目录下的代码会得到更新,同时由于钩子的作用,web目录(/wwwroot/www)下的代码也得到了同步更新。

如果web目录下的代码没有更新,可能是版本产生冲突了,可以在web目录下的项目文件夹(/wwwroot/www/huang)下git pull一下,这样代码就可以正常维护了。

注意,出现如下问题时:

remote: error: insufficient permission for adding an object to repository database ./objects
remote: fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit

客户端机器对服务器git代码仓库的写权限出了问题。

改变代码仓库下,所有文件的访问权限,同组可写,确认严格按照上面的指令执行。

chown -R *

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • git如何撤销commit的方法(未push)

    git如何撤销commit的方法(未push)

    这篇文章主要介绍了git如何撤销commit的方法(未push),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 如何快速解决连接git/github失败的问题

    如何快速解决连接git/github失败的问题

    这篇文章主要介绍了如何快速解决连接git/github失败的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • JetBrains(IEDA、CLion、Pycharm) 学生获得免费使用资格

    JetBrains(IEDA、CLion、Pycharm) 学生获得免费使用资格

    JetBrains针对学生推出了免费使用资格,但是很多同学却不知道或者说不知道怎样获得免费资格,通过学生认证来使用JetBrains的软件才是最方便稳定的,具体怎么获取呢,感兴趣的朋友跟随小编一起看看吧
    2020-08-08
  • POST与GET方法的区别简要分析

    POST与GET方法的区别简要分析

    原理介绍:理论上说,GET是从服务器上请求数据,POST是发送数据到服务器。事实上,GET方法是把数据参数队列(query string)加到一个URL上,值和表单是一一对应的。
    2008-10-10
  • Git中文乱码终极解决方案(git status / git log通用)

    Git中文乱码终极解决方案(git status / git log通用)

    本文介绍了解决Git日志、提交信息、文件名中文乱码问题的方法,包括全局配置、终端设置、系统修复和临时解决方案,并提供了问题自查表和最终验证步骤,需要的朋友可以参考下
    2026-05-05
  • git stash暂存的操作方法

    git stash暂存的操作方法

    这篇文章主要介绍了git stash暂存的操作方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 详解IDEA git分支回退指定的历史版本

    详解IDEA git分支回退指定的历史版本

    这篇文章主要介绍了详解IDEA git分支回退指定的历史版本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • VS Code使用Git可视化管理源代码详细教程(推荐)

    VS Code使用Git可视化管理源代码详细教程(推荐)

    这篇文章主要介绍了VS Code使用Git可视化管理源代码详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • 音视频基本概念和FFmpeg的简单入门教程详解

    音视频基本概念和FFmpeg的简单入门教程详解

    FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。可以轻易地实现多种视频格式之间的相互转换,这篇文章主要介绍了音视频基本概念和FFmpeg的简单入门,需要的朋友可以参考下
    2022-04-04
  • 在Git中添加子模块(submodule)的详细步骤

    在Git中添加子模块(submodule)的详细步骤

    Git子模块(submodule)允许在一个项目中包含另一个独立的git仓库,使用时需注意,子模块提交push后,主模块需同步更新其记录的子模块hash值,否则可能导致冲突,本文详细介绍了如何添加子模块,需要的朋友可以参考下
    2026-01-01

最新评论