Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to achieve 'pre-checkout' hook in Git/bitbucket?

Result of lots of searching on net is that pre-checkout hook in git is not implemented yet. The reason can be:

  • There is no practical use. I do have a case
  • It can be achieved by any other means. Please tell me how?
  • Its too difficult to implement. I don't think this is a valid reason

Here my problem is:

I have implemented the pre-commit, post-merge & post-checkout hooks for maintaining the database backup different for each branch.

Scenario: Now when I commit the backup of database is saved in a file using pre-commit hook. And when I checkout the the branch or merge occurs the database stored in file is restored using post-merge & post-checkout hooks. Now the situation is if someone make changes in database after commit and checkout, the changes are lost, as database was not backed-up. The checkout succeeded as there is no change in file structure.

So in this case I want a pre-checkout hook to handle the task of backing up database in above scenario.

like image 536
Abhishek Sachan Avatar asked Jan 17 '15 14:01

Abhishek Sachan


People also ask

How do you force a pre-commit hook?

If you want to manually run all pre-commit hooks on a repository, run pre-commit run --all-files . To run individual hooks use pre-commit run <hook_id> . The first time pre-commit runs on a file it will automatically download, install, and run the hook. Note that running a hook for the first time may be slow.

How do I enable a hook in bitbucket?

To enable (or disable) hooks for repositories in a project (requires project admin permissions): Go to Project settings > Hooks. Click the toggle by the hook to enable (or disable) it.


2 Answers

You could write a script that does your backup then checkout. Then create a shell alias so it runs that script instead when you type git checkout.

like image 61
Isaac C. Avatar answered Sep 18 '22 06:09

Isaac C.


Pre-checkout use case: delete un-versioned local files generated by gulp watch:css task so they are overwritten after checkout and rebuilt by gulp.

Instead, I'm just going to write a shell script that gets the repo root and then deletes any of a list of gulp-generated files found.

like image 35
Jeremy John Avatar answered Sep 21 '22 06:09

Jeremy John