简体   繁体   中英

Git pushing to non-bare repo, save current worktree

How can I push to a non-bare git repository, automatically add and commit any changes in the working tree, and then re-checkout the current branch to reflect the changes from that push?

I was thinking of something like this:

Add a hook on the remote (the non-bare repo) to run git add . && git commit -m "Automated commit" && git reset --hard git add . && git commit -m "Automated commit" && git reset --hard

Are there any drawbacks to that method? Is there another way of doing this?


(Disclaimer: I know that this isn't the most ideal situation, but this is what we have at my company and I want to make it as streamlined as possible without needing everyone to completely change the way they do things)

Thanks!

After messing around I found a pretty good solution.

Pre-receive hook: Checks for any changes in working directory, adds/commits them, then alerts the user he/she needs to merge before pushing

#!/bin/sh
cd ../
unset GIT_DIR
CHANGED=$(git diff-index --name-only HEAD --)
if [ -n "$CHANGED" ]; then
    git add -u .
    git commit -m "Automated commit"
    echo "There were uncommitted changes in the working directory...please pull them and push your changes again"
    exit 1
fi 

Post-receive hook: Force checks-out the current branch so changes will be shown in working directory. This will overwrite any changes in the working directory, but those will have already been added/committed/merged by the pre-receive hook.

#!/bin/sh
cd ../
unset GIT_DIR
branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')

git checkout -f $branch


echo "Update pushed to branch $branch and checked out in the website directory" 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM