Subject: Re: post-update to stash after push to non-bare current branch

From: Neal Kreitzinger <[email-masked]>
Date: Wed, 18 Jan 2012 18:32:57 -0600

On 1/18/2012 4:38 PM, Junio C Hamano wrote:
> Neal Kreitzinger<[email-masked]>  writes:
>
>> hooks/post-update is:
>>
>> git stash save
>> echo "worktree+index of non-bare remote current branch stashed for safety"
>> git reset --hard
>> echo "git-reset --hard on current remote branch to ensure clean state"
>>
>> message is echoed, but git-reset --hard does not appear to have really
>> worked. (git 1.7.1)
>
> Have you checked where in the filesystem hierarchy that script is run
> (hint: pwd)?
>
echo pwd in post-update echoes /path/WORKTREE/.git in git-push stdout.

> Also it is unclear why you keep saying "stash". What kind of changes are
> you expecting to be saved to the stash? Will they be changes that are not
> source controlled that you would rather not to see? In other words, after
> running "stash" every time somebody pushes and having accumulated many
> stash entries, when do you plan to pop these stashed changes?
>
good point. rejection of dirty worktree is a cleaner safety.

> I would have expect that such a repository to reject a push if the working
> tree is dirty, and run checkout in post-update, though.
>
'git-checkout -f' works manually, but in post-update hook it leaves 
behind dirty worktree, ie. index and HEAD match, but worktree still 
matches HEAD@{1}.  This is the same undesired result git-stash and 
git-reset --hard leave behind when executed in post-update hook.

v/r,
neal