Git Push 上的 JSHint(更新挂钩)

2023-12-21

当客户端推送到远程 git 存储库(裸)时,我想要一个钩子,它可以在传入的更改文件上自动运行 JSHint,并在 JSHint 返回错误时拒绝提交。我只关心确保 master 分支符合我们的 JSHint 配置。所以我有这个脚本:

#!/bin/bash

# --- Command line
refname="$1"
oldrev="$2"
newrev="$3"
branch=${refname#refs/heads/}

echo ${refname}
echo ${oldrev}
echo ${newrev}
echo ${branch}

if [ "$branch" == "master" ]
then
  echo "Need to JSHint" >&2
  exit 1
fi

# Not updating master
exit 0

我想我有两个问题:

  1. 如何获取推送中已更改的文件列表?
  2. 如何将这些文件传递给 JSHint?

我不相信这是完成任务的最佳方式。基本上,代码生成存储库中每个 JavaScript 文件的文件,然后分别调用每个 JavaScript 文件。额外的好处是它实际上使用了项目的 .jshintrc 文件(如果存在)。也在要点上 https://gist.github.com/2884935

有什么建议、指示、替代方案吗???

#!/bin/bash

# --- Command line
refname="$1"
oldrev="$2"
newrev="$3"
branch=${refname#refs/heads/}

# Make a temp directory for writing the .jshintrc file
TMP_DIR=`mktemp -d`
EXIT_CODE=0

# If commit was on the master branch
if [ "$branch" == "master" ]
then
  # See if the git repo has a .jshintrc file
  JSHINTRC=`git ls-tree --full-tree --name-only -r HEAD -- | egrep .jshintrc`

  JSHINT="jshint"
  if [ -n "$JSHINTRC" ]
  then
    # Create a path to a temp .jshintrc file
    JSHINTRC_FILE="$TMP_DIR/`basename \"$JSHINTRC\"`"

    # Write the repo file to the temp location
    git cat-file blob HEAD:$JSHINTRC > $JSHINTRC_FILE

    # Update the JSHint command to use the configuration file
    JSHINT="$JSHINT --config=$JSHINTRC_TMP_DIR/$JSHINTRC"
  fi

  # Check all of the .js files
  for FILE in `git ls-tree --full-tree --name-only -r ${newrev} -- | egrep *.js`; do
    FILE_PATH=`dirname ${FILE}`
    FULL_PATH=${TMP_DIR}/${FILE_PATH}
    mkdir -p ${FULL_PATH}
    git cat-file blob ${newrev}:${FILE} > "$TMP_DIR/$FILE"
    ${JSHINT} ${TMP_DIR}/${FILE} >&2
    # Exit status of last command
    EXIT_CODE=$((${EXIT_CODE} + $?))
    if [[ $EXIT_CODE -ne 0 ]]
    then
      rm -rf ${TMP_DIR}
      exit $EXIT_CODE
    fi
  done
  rm -rf ${TMP_DIR}
fi

# Not updating master
exit 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git Push 上的 JSHint(更新挂钩) 的相关文章

  • php run git 收到“ssh 权限被拒绝”

    我正在尝试从浏览器中运行 git pull php 脚本 但我得到了 sh 连接到主机 git assembla com 端口 22 权限被拒绝 我的 PHP 脚本
  • 是否应该在 git 中跟踪 .history 文件夹中的文件[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 每当我进行更改时 history 文件夹中的某些文件在我的状态中都会显示为未跟踪 我将如何控制它 即 make 是自动添加或不添加这些内容 而不
  • Git 克隆致命

    我在执行 git clone 时遇到错误 fatal pack has bad object at offset 824775943 inflate returned 1 fatal index pack failed 它仅适用于 Wind
  • Git - 显示远程分支的远程名称

    是否有一个 Git 命令可以显示远程分支的远程名称 目前 我坚持使用 shell utils 从远程分支引用中提取远程名称 例如 echo remote name branch name sed r s 1 remote name 有时出于
  • 致命:早期 EOF 致命:索引包失败

    我用谷歌搜索并找到了很多解决方案 但没有一个适合我 我试图通过连接到 LAN 网络中的远程服务器来从一台计算机进行克隆 从另一台机器运行此命令会导致错误 但是在服务器上使用 git 192 168 8 5 运行相同的克隆命令 一切正常并且成
  • 来自 eclipse 的部分 git 提交 (egit)

    假设我有一个有 2 个更改的文件 如何使用 egit 只提交其中之一 命令行版本可以在以下位置找到this https stackoverflow com questions 1085162 commit only part of a fi
  • 如何避免开发人员将凭证推送到 bitbucket?

    我们有一个应用程序 它使用 JSON 文件来定义数据库和其他 API 的连接字符串和凭据 理想情况下 这些凭证作为变量添加到 bitbucket 存储库中 并在 Jenkins 的构建期间进行替换 开发商在当地与他们合作时更换了他们 我们需
  • 将 svn 存储库添加到现有的 git 存储库中?

    我知道你可以使用 git svn init 来跟踪 svn 存储库 但这是为了你想创建一个全新的存储库 我的情况是 我目前已经有一个现有的 git 存储库 并且希望通过将 svn 存储库设为我当前 git 存储库中的远程分支来跟踪 svn
  • 如何让 git 和 copSSH 在正确的目录中查找密钥?

    我刚刚安装了 Windows 版 copSSH 当我启动它时 我得到一个目录C copSSH home Nick ssh其中有我的酒吧和私钥 当我通过 Cygwin bash 窗口访问此目录时 使用 ssh 用户 主机 我很高兴地登录了 但
  • 主存储库和本地存储库在同一台机器上

    我是 Git 新手 我已经在 Linux 服务器中创建了一个主存储库 同一个服务器将由 5 组 每组 3 个用户 使用 我想为每个组创建一个本地存储库 小组成员又应该为每个人创建一个本地存储库 使用内容并将修改提交到小组的本地存储库 我该怎
  • Git refs/remotes/origin/master 没有指向有效的对象

    在上次合并到 Git 存储库的 master 分支后 我失去了克隆存储库的能力 Cloning into test repository remote Counting objects 126084 done remote Compress
  • git 命令显示所有(轻量级)标签创建日期

    是否有一个衬垫可以向我显示所有 git 轻量级标签的创建日期 就像是 git show tags format date 我在这个发现link http osdir com ml git 2009 05 msg01404 html适合我需求
  • EGit(Eclipse git 插件)可以使用 SSH 密钥代替用户名和密码吗?

    我需要提交的 git 中央存储库是使用 SSH 密钥配置的 我的用户名是jmglov 但是当我执行 git 操作时 例如git clone 我使用这个配置 jmglov kitiara cat git config remote origi
  • 如何将普通的 Git 存储库转换为裸存储库?

    如何将 普通 Git 存储库转换为裸存储库 主要区别似乎是 在普通的 Git 存储库中 你有一个 git存储库内的文件夹 包含构成工作副本的所有相关数据和所有其他文件 在裸露的 Git 存储库中 没有工作副本和文件夹 我们称之为repo g
  • 通过链接进入 git-repo,无需冗长的对话框

    In a directory I have symbolic links into a git administered directory all under Linux Every time I want to e dit such a
  • git Branch -d :致命 - 无法查找 HEAD 的提交对象

    假设我在一个裸存储库 远程 中 如果我尝试使用以下命令删除分支git branch d
  • 如何查看 github 的 SSH 密钥?

    我最近收到一封来自 Github 的电子邮件 要求我检查我的 SSH 密钥 请检查您的钥匙并确保您 认出他们 如果您有任何疑问 请拒绝钥匙并 上传新密钥 如何在 ubuntu 11 10 上使用 git 检查我的密钥 您可以按照 GitHu
  • Eclipse 与外部 src 和 Web 内容文件夹链接或映射

    首先这不是问题但是我遇到的问题的解决方案浪费了4 5个小时来找到解决方案 请让我知道是否有更好的替代方法来使用 eclipse 项目管理外部 src 文件夹 我正在使用版本控制系统 GIT 来管理我的项目 还使用外部 Git 客户端 Sou
  • 有人熟悉 git 错误“缺少对象 0000000000000000000000000000000000000000 for refs/heads/...”吗?

    我们正在运行 git v1 7 1 并配置了 gitweb 我们也使用 gitolite 进行管理 但我不认为这与这个问题有密切关系 有时我们会在 Apache 日志中收到如下错误 missing object 00000000000000
  • git Blame:合并后正确的作者

    GIT 合并引入了新的提交 这会导致 git Blame 问题 合并的行似乎是由进行合并的开发人员提交的 我可以理解这种情况冲突的变化 因为他解决了冲突 但是有没有办法让非冲突线路不发生这种情况呢 一些 git Blame 的选择 如果没有

随机推荐