git push vs. slow connection times - local commit resolution is too late
I've been bitten several times by this bug now, so I'll report it in the hopes that someone knows what to do to patch it.
Scenario - I have a remote repository that takes on the order of 10 seconds to connect to, for any operation like 'git push'. I know that there is a lag, so I intentionally have two terminals open, both visiting the same directory, one for interaction with the remote, and the other for acting on the local repository, with the hope that I can do useful work in the second terminal rather than idly waiting on the lag in the first terminal.
In the middle of rebasing a patch series, where I want to incrementally push the patches that I have gotten through so far, I used the following steps:
On the remote-interaction terminal, I push the current state of my tree:
git push remote HEAD:master
On the local-interaction terminal, I move on to the next patch:
git rebase --continue
then, to my horror, I find out that the commit I'm working on locally has already been pushed! Why? Because 'git push remote HEAD:master' does not determine which commit 'HEAD' refers to until _after_ it has established a connection to remote, but the stupid 10-second lag was long enough that my actions in my second terminal have changed HEAD in the meantime.
I would really love it if 'git push' would resolve all local references _prior_ to trying to connect to the remote server, rather than waiting until after the connection. That way, my remote-interaction terminal can truly be a type-it-and-forget-it terminal, where the push action I requested reflects the state of the tree at the time I requested it, rather than picking up changes made later in another terminal.
Signature · 2 lines
Eric Blake [email protected] +1-801-349-2682 Libvirt virtualization library http://libvirt.org
Quoted 28 lines · Eric Blake
I've been bitten several times by this bug now, so I'll report it in the hopes that someone knows what to do to patch it.
Scenario - I have a remote repository that takes on the order of 10 seconds to connect to, for any operation like 'git push'. I know that there is a lag, so I intentionally have two terminals open, both visiting the same directory, one for interaction with the remote, and the other for acting on the local repository, with the hope that I can do useful work in the second terminal rather than idly waiting on the lag in the first terminal.
In the middle of rebasing a patch series, where I want to incrementally push the patches that I have gotten through so far, I used the following steps:
On the remote-interaction terminal, I push the current state of my tree:
git push remote HEAD:masterOn the local-interaction terminal, I move on to the next patch:
git rebase --continuethen, to my horror, I find out that the commit I'm working on locally has already been pushed! Why? Because 'git push remote HEAD:master' does not determine which commit 'HEAD' refers to until _after_ it has established a connection to remote, but the stupid 10-second lag was long enough that my actions in my second terminal have changed HEAD in the meantime.
Quoted 6 lines
I would really love it if 'git push' would resolve all local references _prior_ to trying to connect to the remote server, rather than waiting until after the connection. That way, my remote-interaction terminal can truly be a type-it-and-forget-it terminal, where the push action I requested reflects the state of the tree at the time I requested it, rather than picking up changes made later in another terminal.
I agree with your suggestion. But as a quick fix, can you do this?
git push remote $(cat .git/HEAD):master
Damned inconvenient, though.
Phil
Quoted 2 lines · Phil Hord
I agree with your suggestion. But as a quick fix, can you do this?
git push remote $(cat .git/HEAD):master
You mean $(git rev-parse HEAD), don't you?
Andreas.
Signature · 3 lines
Andreas Schwab, [email protected] GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."
Andreas Schwab helpfully chimed in
Quoted 6 lines
Quoted 2 lines · Phil Hord
I agree with your suggestion. But as a quick fix, can you do this?
git push remote $(cat .git/HEAD):masterYou mean $(git rev-parse HEAD), don't you?
Yes, I do. :-) But I don't use it enough to remember it, and the man pages are not cross-referenced well enough for me. So I shrugged.
Thanks for helping me out.
Phil