git - git:如何在预接收挂钩中 grep 接收到的文件
问题描述
我在本地存储库中创建了以下预推送脚本,.git/hooks/
以禁止将具有未解决的 git 冲突的文件推送到服务器:
#!/bin/bash
top_dir=$(git rev-parse --show-toplevel)
conflicts=$(grep -r -n -s --include=\*.{pm,pl,mc,mi,js,css} "<<<<<<< HEAD" "$top_dir")
if [ "$conflicts" = "" ]; then
exit 0
else
printf "Unresolved git conflict found, commit rejected.\n\n"
echo "$conflicts"
exit 1
fi
有用。但是我们如何拒绝所有在服务器端存在未解决冲突的提交pre-receive
呢?在这里我知道top_dir
- 目录,在哪里 grep。但是在服务器上没有保存的文件。我需要在客户发送给我的文件中进行 grep。
怎么做?
解决方案
作为“钩子无法读取提交的文件以推送到远程”中的torek文档:pre-receive
master
预接收挂钩通常更难编写,因为您必须处理许多情况:
- 多次提交
- 不是分支(标签)的引用
- 不是提交的对象(带注释的标签)
- 分支创建和删除以及更新
这种钩子适用于提交消息。
话虽如此,您可以在此处看到一个示例,在名义情况下:
# <oldrev> <newrev> <refname>
while read oldrev newrev ref ;
do
list = $ ( git show --pretty = " format: " --name-only $ {newrev} | grep -e ' .php ' -e ' .phtml ' )
for file in $ {list} ; do
git show $ {newrev} : $ {file} > $ TMP_FILE
OUTPUT = $ ( $ PHPCS_BIN -s --standard = $ PHPCS_CODING_STANDARD $ TMP_FILE )
...
推荐阅读
- swift - 在 Firebase 实时数据库中实现用户名(swift 4)
- kubernetes - Google Cloud Kubernetes 集群无法连接节点或删除?
- angular - 对具有不同输出的不同路线使用相同的组件
- android - Flutter:如何调试在状态更改时重新渲染的小部件
- python - How to wrap occurences of string in containers in python
- java - FileReader 上的 FileNotFoundException
- php - 如何从 php 变量对象中检索值
- object-detection - Yolo 中使用了哪种物体检测系统?
- r - 在 R 中创建变量时出错
- maven - 目标部署路径与 POM 的预期路径前缀不匹配