如何仅对暂存内容运行 git 预提交检查?

2024-05-07

Suppose git status给出这个:

# On branch X
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   file1.cc
#   modified:   file1.h
#   modified:   file1_test.cc
#   modified:   SConscript
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#   (commit or discard the untracked or modified content in submodules)
#
#   modified:   file1.cc
#   modified:   tinyxml2 (untracked content)
#

在这种情况下,仅对 file1.cc 所做的部分更改已上演/为下一次提交建立索引。

我运行一个预提交脚本来运行样式检查器:

#!/bin/bash                                                                                                                                                                     

git stash -q --keep-index

# Do the checks                                                                                                                                                                 
RESULT=0
while read status file
do
    if python ~/python/cpplint.py "$file"; then
        let RESULT=1
    fi
done < <(git diff --cached --name-status --diff-filter=ACM | grep -P  '\.((cc)|(h)|(cpp)|(c))$' )

git stash pop -q

[ $RESULT -ne 0 ] && exit 1
exit 0

正如建议的here http://codeinthehole.com/writing/tips-for-using-a-git-pre-commit-hook/,我在运行样式检查之前隐藏未暂存的文件,然后弹出它们。但是,在仅暂存文件中的部分更改的情况下,当我在预提交挂钩末尾弹出存储时,这会导致合并冲突。

有什么更好的方法来做到这一点?我想对即将提交的文件的暂存版本运行样式检查。


我会避免使用git stash自动进入钩子。我发现可以使用git show ':filename'获取隐藏文件的内容。
相反,我使用了下一种方法:

git diff --cached --name-only --diff-filter=ACMR | while read filename; do
    git show ":$filename" | GIT_VERIFY_FILENAME="$filename" verify_copyright \
        || exit $?
done \
    || exit $?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何仅对暂存内容运行 git 预提交检查? 的相关文章

  • 如何修复树与树之间的 Git 错误断开链接?

    我的事务被中断 当我再次尝试时 我遇到了空或损坏的对象错误 在另一个问题之后 我删除了所有空文件 当我运行时 git fsck full 我收到这个错误 Checking object directories 100 256 256 don
  • DVCS命令的统一

    当处理多个 开源 项目时 多个版本控制系统开始出现问题 虽然它们共享共同的操作 但我经常在输入时犯错误hg add反而git add 我记得前段时间看到过一个项目 通过提供基本命令以统一的方式访问不同的源代码控制软件提交 ci add等在外
  • 相当于“svn update -r”的 git 是什么?

    我是最近的 git 转换者 能够使用 git svn 将我的分支保留在本地而不干扰 svn 服务器真是太棒了 最新版本的代码中存在一个错误 我想确定一个它起作用的时间 以便我可以使用 git bisect 我找不到正确的命令来及时返回 谢谢
  • 忽略 git 中的本地配置文件

    Rails 应用程序中有一些本地文件 属于我们存储库的一部分 我希望 git 忽略它们 基本上 我希望 git 忽略我对 config environments 目录和 config application rb 文件中的任何内容所做的所有
  • Jenkins git 插件 - 有时太慢

    以下内容摘自 Jenkins 日志 00 00 03 135 gt git fetch tags progress email protected cdn cgi l email protection some org some repo
  • 重新打包存储库对于大型二进制文件有用吗?

    我正在尝试将大量历史记录从 Perforce 转换为 Git 并且一个文件夹 现在是 git 分支 包含大量大型二进制文件 我的问题是运行时内存不足git gc aggressive 我的主要问题是重新打包存储库是否可能对大型二进制文件产生
  • git - 更新 fork 的 master 并将我的分支重新建立到它之上?

    我分叉了一个 github 项目 然后将其克隆到本地 然后我在新分支中做了一些更改my github the project repo 然后我添加并提交了更改 并推送到我的 github 存储库并提交了拉取请求 所有者已收到我的请求 并希望
  • 如何从 android.googlesource.com 或 github.com 下载单个目录?

    我想下载 https android googlesource com platform frameworks base git master tools aapt https android googlesource com platfo
  • `git ls-files -s` 输出中不同字段的含义是什么?

    在 Git 中 命令返回的典型结果行git ls files s好像 100755 be2c2e9b0966253096472d4b482c458bc892e493 0 gitignore 这些字段是什么意思 不用再犹豫了git ls fi
  • .gitconfig 别名函数调用

    我在 gitconfig 中定义了以下别名 alias teamcity tc tc是我在我的中定义的一个shell函数 bashrc文件 由于某种原因 我收到以下错误 aafghani 03 git workday amirafghani
  • 默认情况下 git merge -Xignore-space-change

    我该如何设置该选项ignore space change对于所有合并使用git config 我也许可以使用别名merge 但因为我希望该设置应用于git stash pop git stash apply git pull and git
  • 无法从 Sourcetree 拉取 Git 远程存储库

    我生成了 ssh 密钥并配置了我的 git 和 SourceTree 我可以 git pull 并从 Git bash 执行其他操作 注意 我在 bashrc 中添加了以下内容以使其正常工作 eval ssh agent ssh add 然
  • 使用终端时 Git 推送在总计后卡住了?

    我尝试将一些文件推送到Github 总大小只有22 2M 我不知道为什么它在总行之后卡住了 我读过推送到 Github 时 Git 推送挂起 https stackoverflow com questions 16906161 git pu
  • git 日志历史记录图,每次提交一行,彩色,带有日期

    我需要的格式如下 git log decorate graph oneline date order 但我也需要它 包含日期 短 具有相同的颜色 I tried git log decorate graph oneline date ord
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件
  • 将bitbucket发布到数字海洋

    我本质上是试图使用 bitbucket 来理解 git 的概念 我一直在通过修改本地帐户和 bitbucket 帐户之间的文件来练习版本控制 事实证明这很有帮助 现在我正在尝试弄清楚如何将文件从 bitbucket 或者我猜是 GitHub
  • Git 2.2.x 无缘无故更新旧包文件的时间戳

    Git 2 2 0 和 2 2 1 似乎修改了旧的时间戳 git objects pack pack pack偶尔会无缘无故地文件 它只是改变时间戳 内容是相同的 调试这一点很困难 因为它似乎很少进行更改 我在 2 2 0 之前的任何 Gi
  • 如何让 Aptana Studio 记住 git ssh 密码

    我找不到任何有关如何获得 Aptana Studio 的内置 git 支持来记住执行推 拉操作的 ssh 密码的指南 信息 有人有什么想法吗 Aptana Studio 实际上是内置的 GIT 程序 它将在 Windows 上的 C Use
  • Git - 如何将整个目录恢复到特定提交(删除任何添加的文件)

    我想恢复 git 中的目录 恢复其中的所有文件 并删除自该提交以来添加的所有文件 进行结账似乎只能满足我的第一个要求 但不会删除任何文件 我想出了最简单的解决方案 git rm path to dir git checkout
  • 仅使用 Git grep 的文件名

    我只想查看文本中包含特定单词的不同文件 current directory git grep word 显示文件中具有匹配单词的每一行 所以我尝试了这个 current directory git grep word files with

随机推荐

  • 检查目录是否为空

    我正在尝试检查目录是否为空 MainWindow MainWindow QWidget parent QMainWindow parent ui new Ui MainWindow ui gt setupUi this QDir Dir h
  • jQuery触发新添加的html代码

    示例我有 2 个 html 输入 div class wrap div
  • git push heroku master 通过代理后面的 ssh 出现错误

    简要背景 大家好 我是一名大学生 代理 10 3 100 211 8080 刚接触 ROR Git 和 Heroku 一直在关注 Ruby on Rails 教程 我解决了通过 ssh 推送 git repo 的问题 在我的 ssh con
  • 如何在 Perl 中取消导入函数?

    我正在尝试删除导入的符号 以便它们不能用作对象中的方法 但是no似乎不起作用 也许我不明白不 或者还有其他方法 use 5 014 use warnings use Test More still has carp after no car
  • 执行命令不会在后面的资源字典代码中触发

    我已经为其创建了资源字典和代码隐藏文件 在 XAML 中 我定义了命令绑定并添加了执行处理程序
  • Android 按文件夹列出音乐并播放

    我正在开发已经上市的安卓音乐播放器 用户要求添加一个文件夹视图来列出智能手机中包含音乐的所有文件夹 我想开发它 MediaStore 已经知道要遵循的正确路径 因为它需要知道它们每次重新扫描 SD 卡 所以我想知道是否有办法获取这些路径并使
  • Stripe Connect - 检索访问令牌

    我正在尝试为 Rails 3 2 13 应用程序设置 Stripe Connect 我已将用户引导至 Stripe 并收到了来自 Stripe 的授权码 HTTP 1 1 302 Found Location http localhost
  • 如何在 PHP 中解密密码哈希?

    我需要解密密码 密码已加密password hash功能 password examplepassword crypted password hash password PASSWORD DEFAULT 现在 我们假设 crypted存储在
  • Opencv未找到所有轮廓

    我试图找到该图像的轮廓 但是该方法查找轮廓只返回1轮廓 轮廓突出显示image 2 我正在努力寻找all外部轮廓就像这些圆圈 里面有数字 我究竟做错了什么 我可以做什么来实现它 image 1 image 2 以下是我的代码的相关部分 th
  • MSBuild - 我可以编译子目录中的所有解决方案吗?

    MSBuild 中有没有一种方法可以编译指定父级下的文件夹 子文件夹和子 中的所有解决方案 我们的库附带了很多示例程序 我想添加到构建过程中 我们知道它们都会编译 您可以创建自己的targets for restore and build运
  • 从命令提示符启动mysql服务器时出错

    我是 sql 新手 我安装了 mysql 并且正在阅读这本书 Java 如何编程连接到 mysql 我收到以下错误 关于时间戳 我明白原因 但我正在尝试修复 无法创建测试文件 C Program Files MySQL MySQL Serv
  • 如何在 Dart 中传递常见参数?

    说吧 我有 callback orderBy foo reverse true localToThis callback orderBy foo reverse true 您可以在两个回调中看到 我传递了相同的参数 foo reverse
  • 如何为 Safari 浏览器设置媒体查询

    media only screen and min width 480px and max width 767px 这是我的媒体查询如何修复它 如何设置 safari 网络浏览器 媒体查询不是为了浏览器检测而进行的 使用 javascrip
  • 有没有办法确定特定地址是否位于 x 英里内的路线沿线?

    有没有办法确定特定地址是否位于 x 英里内的路线沿线 Google 地图 API 是否支持此功能 我有一个地址数据库 我试图找出 Google 地图 API 确定的给定路线上的哪些位置 您可以设置获取折线 http code google
  • 将文本文件中的多行组合/合并为一行 (Powershell)

    我有一个文本文件 其中包含如下内容 blah blah blah Text string1 string2 string3 string4 string5 string6 blah blah blah Text string7 string
  • Spring MVC 3 中的表单提交 - 说明

    我在理解 Spring 3 MVC 中的表单提交如何工作时遇到问题 我想做的是创建一个控制器 它将获取用户的名字并将其显示给他 不知怎的 我已经做到了 但我不太明白它是如何工作的 所以 我有一个看起来像这样的表格
  • RavenDb 和多租户

    我已经研究并使用了 RavenDb 一段时间 并开始考虑 MultiTenancy 多租户 Ayendes 示例如下所示 using var store new DocumentStore Url http localhost 8080 I
  • 调用 DynamoDB 中的用户数据时渲染得太晚

    所以我试图从dynamoDB 我正在使用一个GraphQL API访问我的数据库 在提供的代码的注释部分中 我提到我已经尝试过users 1 friends map 它确实返回正确的朋友列表数组 但用户似乎直到朋友列表渲染后才被设置 我应该
  • 如何滚动到 div 元素底部 Selenium Webdriver

    我有一个用例 其中网页上有一个 div 元素 只要您单击链接 它就会出现一个弹出对话框 它不是实际的弹出窗口 它类似于当您单击链接进行检查时在 Facebook 中打开的对话框 对您的帖子的反应等 我使用 Selenium WebDrive
  • 如何仅对暂存内容运行 git 预提交检查?

    Suppose git status给出这个 On branch X Changes to be committed use git reset HEAD