git add from在git预提交钩子只添加文件每隔一秒



设置git跟踪网站的更改。本网站使用MySQL数据库。我需要在每次提交中包含数据库的转储。有时只对数据库进行了更改,但我仍然希望能够提交此更改。

我已经设置了一个git预提交钩子来转储数据库,并将该转储文件添加到git。git钩子如下所示:

#!/bin/bash
systemname="mysystem"
dumppathname=".dbexports/${systemname}_dbdump_$(date +%Y%m%d_%H%M%S).sql"
./.scripts/dump_database.sh $dumppathname
if test $? -ne 0
then
echo "Dumping database failed. Aborting the commit..."
exit 1
else
git add $dumppathname
exit 0
fi

dump脚本运行mysqldump命令来转储具有所需选项的数据库。该命令按照设计工作,并将转储文件写入$dumppathname变量指定的文件。

问题出在git add上。转储文件只会每隔一秒添加一次。

  • Git处于干净状态,即所有更改都已提交,没有未跟踪的文件。
  • 我对网站进行了一些更改,仅反映在一些数据库更改中。我想提交这个状态,所以我这样做:
me@mysystem /website> git commit -m "Track database changes, only."

响应是(第一行由转储脚本编写):

Dumping current database 'mywebsite' to '.dbexports/mysystem_dbdump_20211024_132309.sql'
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
.dbexports/mysystem_dbdump_20211024_132309.sql
nothing added to commit but untracked files present (use "git add" to track)

似乎git add从git钩子没有工作。

  • 但是,我立即做了另一个commit:
me@mysystem /website> git commit -m "Track database changes, only. Second time."

响应是(同样,第一行是由转储脚本编写的):

Dumping current database 'mywebsite' to '.dbexports/mysystem_dbdump_20211024_132323.sql'
[master 87cfdb9] Track database changes, only. Second time., 1 uncommited files.
2 files changed, 22630 insertions(+)
create mode 100644 .dbexports/mysystem_dbdump_20211024_132309.sql
create mode 100644 .dbexports/mysystem_dbdump_20211024_132323.sql

所以,这次来自第一个的转储文件,以及来自当前commit的转储文件似乎都进入了提交。我错过了什么?

你观察到的行为似乎是Gitpre-commit钩子在你使用的Git版本中如何工作的一个工件。

如果你读了上面的答案和下面的注释,Git钩子能自动添加文件到提交吗?,您将看到,对于许多人/对于某些版本的Git,pre-commit钩子将在提交之后执行钩子脚本中的任何git add。这意味着您的数据库转储文件不会被提交,而只是被分级。然后它在你下一次提交时被提交,这就是为什么你看到它每一次提交都被提交。

至少这是我的理论。

最新更新