如何在Git/bitbucket中实现'pre-checkout'钩子?

Abh*_*han 11 git hook bitbucket git-checkout

在网上进行大量搜索的结果是pre-checkoutgit 中的钩子还没有实现.原因可能是:

  • 没有实际用途.我有一个案子
  • 它可以通过任何其他方式实现.请告诉我怎么样?
  • 实施起来太难了.我认为这不是一个正当理由

我的问题在于:

我已经实现了pre-commit,post-mergepost-checkout挂钩维护每个分支不同的数据库备份.

场景:现在我提交数据库的备份时使用pre-commithook 保存在文件中.当我签出分支或合并时,使用post-merge&post-checkouthooks 恢复存储在文件中的数据库.现在的情况是,如果有人在提交和签出后对数据库进行了更改,则更改将丢失,因为数据库未备份.结帐成功,因为文件结构没有变化.

所以在这种情况下我想要一个pre-checkout钩子来处理上面场景中备份数据库的任务.

小智 8

您可以模拟pre-checkoutgit hook:

#!/bin/bash
# .git/hooks/pre-checkout

export PRE_CHECKOUT=true
git switch --quiet -
BRANCH=$(git branch --show-current)
echo "first go back to $BRANCH branch to do stuff"
git switch --quiet -
Run Code Online (Sandbox Code Playgroud)

调用此脚本post-checkout,它将切换回源分支执行操作,然后再次返回目标分支。它使用PRE_CHECKOUT环境变量来跟踪自己的执行,因此post-checkout钩子需要一些逻辑只执行一次:

#!/bin/bash
# .git/hooks/post-checkout

# confirm the environment variable exists and it is 'true'
if [ ! -z $PRE_CHECKOUT ] && $PRE_CHECKOUT
then
    exit 0
fi

. .git/hooks/pre-checkout
BRANCH=$(git branch --show-current)
echo "now in $BRANCH branch doing post-checkout stuff"
Run Code Online (Sandbox Code Playgroud)


Abh*_*han 0

我明白了它没有实施的原因。在我的情况下,我会备份数据库并将其存储在文件中,这每次都会导致签出失败。因此,实现此功能是不切实际的。