【问题标题】:Git Pre-Commit Hook Adding File After CommitGit Pre-Commit Hook 在提交后添加文件
【发布时间】:2023-04-11 11:34:01
【问题描述】:

我正在尝试转储 mysql 数据库并使用预提交挂钩将 .sql 转储文件添加到暂存区域,以便随后可以将其包含在提交中(在 Windows Server 2012 R2/IIS 上)。下面的代码很好地转储了数据库,但是在我提交后它仍然在暂存区域中显示 be.sql 文件......有时(?) - 它似乎是在提交之后将文件添加到暂存(?)。这是一个预提交挂钩,所以我不知道为什么它可能会在提交发生后添加文件:

#!/bin/bash

# Dump Database
/c/Program\ Files\ \(x86\)/MySQL/MySQL\ Server\ 5\.7/bin/mysqldump.exe -u root --skip-extended-insert be > /c/inetpub/wwwroot/directory/be/be.sql

# Add Database
cd /c/inetpub/wwwroot/directory/be
git add be.sql

这种行为有点奇怪——我会看到 be.sql 仍然在暂存区,所以我会提交。如果我 git status 之后树是干净的。如果我再次提交并 git status 它将在暂存索引中显示 be.sql 文件已修改(我没有修改它)。它来回走动。我只希望它转储 .sql 文件,将 .sql 文件添加到暂存索引,然后在每次暂存索引干净时提交。任何关于为什么会发生这种情况的想法将不胜感激。

【问题讨论】:

  • 尝试在最后一行添加“exit 0”(在少数“互联网”示例中看到)
  • 您的脚本中有一个“cd”,它将它从当前目录(这在 Git 挂钩中有点棘手)移动到某个 other 目录。但同时,您不要覆盖各种 Git 环境变量,这意味着由 Git 设置的将 Git 引导到特定存储库、索引文件和/或工作树路径的变量可能仍会引导 Git特定(现在可能是错误的)此类文件。我不确定 Git-for-Windows 与“普通”Git 相比是否有任何奇怪和特殊的功能,但普通 Git 最终会根据参数 between git 和子命令设置变量, 加上... [继续]
  • commit 钩子(pre-commit、edit-commit-msg)在设置GIT_INDEX_FILE 的情况下运行。幸运的是,从 Git 版本 1.5.4 开始,在预提交挂钩中明确允许修改索引文件(暂存区域)。但是,路径可能是相对的,如果是这样并且您正在 cd-ing 到不同的位置,则需要对其进行调整。
  • 您好 Torek,感谢您的笔记。我已经在这个帖子上回答了这个问题,我无法接受它作为另一天的答案,这就是为什么这个问题仍然存在。
  • 嗨 Torek,我想再次写信,感谢您的评论。它没有解决我最初的问题,但前几天它又开始发生了,这是一个不同的问题,与文件同步(包括挂钩)如何导致文件重新同步到它们刚刚提交的目录中,从而将其置于暂存索引中。当我回到这个线程并阅读您的评论时,它触发我重新检查挂钩正在读取的目录,我注意到同步覆盖了正确的目录。再次感谢。

标签: mysql git githooks pre-commit-hook


【解决方案1】:

使用:

git commit -m "Message" --allow-empty

当提交似乎有效时。似乎 git 需要其他分阶段的更改才能使钩子起作用。所以它基本上没有进行提交,但仍然转储了 be.sql 文件,然后由于日期已更改,该文件将在下一次修改后显示在暂存索引中。为了让提交完全通过,无论是否有其他分阶段更改,我使用了 --allow-empty 选项,它允许提交在分阶段索引中没有任何内容。

【讨论】:

    猜你喜欢
    • 2012-01-18
    • 2011-06-17
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 2011-12-16
    • 2011-04-06
    • 2015-08-19
    相关资源
    最近更新 更多