Welcome!
This is the community forum for my apps Pythonista and Editorial.
For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.
Broken pipe error using Stash's git push (both http&https)
-
[alphabear-solver]$ git push https://github.com/wizardofozzie/alphabear-solver.git Attempting to push to: https://github.com/wizardofozzie/alphabear-solver.git, branch: refs/heads/master stash: <class 'urllib2.URLError'>: <urlopen error [Errno 32] Broken pipe>
I'm getting the same error trying to push the commit to GitHub irrespective of whether I use http or https.
The weird thing is, another repo worked perfectly fine just prior to trying to push this repo (using https, http threw an error).
Can anyone enlighten me as to what the issue here is? (Pythonista 3, latest Stash version)
-
This happens when the master on github is not a direct ancestor of the commit you are pushing. Most likely you made another commit in github without doing a pull back to stash git. updating the readme is a common way this happens.
I have not been able to figure out why dulwich breaks here, while regular git does not...
You have a few options:
- Try
git fetch
followed bygit merge
follwed by git commit and push. This may or may not work, i have had mixed success, but ideally is the way to ensure you don't lose any commits. - Try
git fetch
thengit branch newbranchname origin/master
thengit reset newbranchname --soft
thengit commit
then push. Effectively this creates a new branch starting at the github master. Then, the reset sets HEAD to point at the new branch, but does not actually change any files, or the "index". Then commit recommits the index into the new branch (you lose your commit history, sort of like doing a rebase). finally you push it. note you will lose any commits that you had made directly to github but not merged locally, though those commits are available in remotes/origin/master, so you can use reset to reset individual files, etc. - clone the repo again to a new folder, copy the changed files from your old folder, then commit, push. just be sure you remember which folder is which, and delete the old one once you are sure everything took.
git remote sshorigin ssh://git@github.com/username/repo.git
, then set up ssh keys using ssh_keygen, and going to github and pasting in the public key. This lets yougit push sshorigin
, which for whatever reason does not suffer from the problem of wanting only fast forward changes. Note you will lose whatever commits you made on github that were not merged into your local copy.
- Try
-
StaSh v0.6.13 Tip: Send a running command to background by pressing the CZ button (Ctrl-Z on external keyboard) [~/Documents]$ cd alphabear-solver/ [alphabear-solver]$ git fetch http://github.com/wizardofozzie/alphabear-solver.git Starting fetch, this could take a while stash: <class 'dulwich.errors.HangupException'>: The remote server unexpectedly closed the connection. [alphabear-solver]$ git fetch http://github.com/wizardofozzie/alphabear-solver.git Starting fetch, this could take a while stash: <class 'dulwich.errors.HangupException'>: The remote server unexpectedly closed the connection. [alphabear-solver]$ git fetch http://github.com/wizardofozzie/alphabear-solver.git Starting fetch, this could take a while stash: <class 'dulwich.errors.HangupException'>: The remote server unexpectedly closed the connection. [alphabear-solver]$ git fetch https://github.com/wizardofozzie/alphabear-solver.git Starting fetch, this could take a while Counting objects: 3, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Fetch successful. Importing refs imported refs/remotes/origin/master a650a1a9b804dde858f74928fc8e615a97e2f5a4 Checking for deleted remote refs Fetch complete [alphabear-solver]$ git merge ______________________________ stash: <type 'exceptions.TypeError'>: object of type 'NoneType' has no len() [alphabear-solver]$ git merge -h ______________________________ usage: git merge' [--msg <msg>] [<commit>] git merge --abort merges <commit> into HEAD, or remote tracking branch if commit not specified. <commit> can be a local or remote ref, or an existing commit sha. merge will handle unambiguous conflicts between head and other merge head, and will insert conflict markers if conflicts cannot be resolved. note that the strategy used will prefer changes in the local head. for instance, if HEAD deleted a section, while MERGE_HEAD modified the same action, the section will be deleted from the final without indicating a conflict. be sure to commit any local changes before running merge, as files in working tree (i.e on disk) are changed, and checked in, which will probably overwrite any local uncomitted changes. note merge will not actually commit anything. run git commit to commit a successful merge. --abort will remove the MERGE_HEAD and MERGE_MSG files, and will reset staging area, but wont affect files on disk. use git reset --hard or git checkout if this is desired. positional arguments: commit commit sha, local branch, or remote branch name to merge from optional arguments: -h, --help show this help message and exit --msg MSG commit message to store --abort abort in progress merge attempt [alphabear-solver]$ git merge HEAD ______________________________ Fast forwarding master to ecb4a1958ef8b1e288151822ff087f3f64894745 [alphabear-solver]$ git commit Commit Message: 1 46c9d246c69a3506ec3336357e6f9baea52caf2f [alphabear-solver]$ git push Attempting to push to: https://github.com/wizardofozzie/alphabear-solver.git, branch: refs/heads/master stash: <class 'urllib2.URLError'>: <urlopen error [Errno 32] Broken pipe> [alphabear-solver]$ git fetch https://github.com/wizardofozzie/alphabear-solver.git Starting fetch, this could take a while Fetch successful. Importing refs imported refs/remotes/origin/master a650a1a9b804dde858f74928fc8e615a97e2f5a4 Checking for deleted remote refs Fetch complete [alphabear-solver]$ git branch newb origin/master [alphabear-solver]$ git reset newb --soft updating HEAD to newb [alphabear-solver]$ git commit Commit Message: 2 71e91a769320587655bae120454d7fce88ee367b [alphabear-solver]$ git push Attempting to push to: https://github.com/wizardofozzie/alphabear-solver.git, branch: refs/heads/newb stash: <class 'urllib2.URLError'>: <urlopen error [Errno 32] Broken pipe> [alphabear-solver]$ git remote sshorigin ssh://git@github.com/wizardofozzie/alphabear-solver.git [alphabear-solver]$ ssh_keygen stash: ssh_keygen: command not found [alphabear-solver]$
-
So, 1 & 2 don't work as I posted above, @JonB
I really appreciate the help.Let me rephrase the problem: if I delete the GitHub repo, how can I push my folder to GitHub?
-
Sorry, i was wrong about a few of the commands:
git fetch origin
( although fetch claims to accept a url, it really wants a remote name)
git merge origin/master
( the argument is required, apparantly)For keygen, sorry, should be:
ssh-keygen -trsa -b2048
creates a rsa key.pbcopy ~/.ssh/id_rsa.pub
copies it to the clipboard. You then go to github settings/ssh keys, and click the create new key button, and paste it in with a title of your choice.
I am updating the gh command to easily add keys without this extra step. -
just to be clear: you have commits locally, but none in github?
Delete the github repo, then create it without the auto option (bare repo).
As an example:
[~/Documents]$ mkdir example [~/Documents]$ cd example [example]$ git init . [example]$ echo hello world > Readme.md [example]$ git add Readme.md Adding Readme.md [example]$ git commit Commit Message: First commit Author Name: jb Save this setting? [y/n]y Author Email: jb Save this setting? [y/n]y f065a0f14eaaa9777ea250ab5b9e3a2226ea2991 [example]$ gh create example -i Created https://github.com/jsbain/example [example]$ git remote origin https://github.com/jsbain/example.git [example]$ git push
-
[~/Documents]$ cd alphabear-solver/ [alphabear-solver]$ git init . stash: <type 'exceptions.OSError'>: [Errno 17] File exists: './.git' [alphabear-solver]$ ls -h usage: ls.py [-h] [-1] [-a] [-l] [files [files ...]] positional arguments: files files to be listed optional arguments: -h, --help show this help message and exit -1, --one-line List one file per line -a, --all do not ignore entries starting with . -l, --long use a long listing format [alphabear-solver]$ ls -1a .git README.md ab.py dictionary.txt hashdict.py map.json solver.py [alphabear-solver]$ rm .git .git: is a directory [alphabear-solver]$ rm -r .git [alphabear-solver]$ git init . [alphabear-solver]$ git add * Adding README.md Adding ab.py Adding dictionary.txt Adding hashdict.py Adding map.json Adding solver.py [alphabear-solver]$ git commit Commit Message: bare Pythonista commit Author Name: wizardofozzie Save this setting? [y/n]y Author Email: djsim4242@gmail.com Save this setting? [y/n]y 628238a51a09ccbff9d389e2a27cd340d4ffe640 [alphabear-solver]$ gh create alphabear-solver -i Created https://github.com/wizardofozzie/alphabear-solver [alphabear-solver]$ git remote origin https://github.com/wizardofozzie/alphabear-solver.git [alphabear-solver]$ git push Attempting to push to: https://github.com/wizardofozzie/alphabear-solver.git, branch: refs/heads/master stash: <class 'urllib2.URLError'>: <urlopen error [Errno 32] Broken pipe> [alphabear-solver]$
Same issue
-
hmm, strange. i followed your example and it worked.
Can you check your dulwich version?import dulwich print(dulwich.__version__)
Also, go ahead and update stash:
selfupdate dev
and force quit pythonista, and restart it.run
gh create_key stash
to create a ssh key and link it with your github account.Then,
git remote origin ssh://git@github.com/wizardofozzie/alphabear-solver.git
and then trygit push
This may be a stupid question, but is your user and password stored corrctly?
import keychain print([s for s in keychain.get_services() if s[0]=='stash.git.github.com'][0]) print(keychain.get_password(*[s for s in keychain.get_services() if s[0]=='stash.git.github.com'][0]))
This should be exactly your github login info.
-
Dulwich version
(0,12,2)
Keychain checks out.
gh create_key stash
[alphabear-solver]$ gh create_key stash stash: <class 'github.GithubException.GithubException'>: 422 {u'documentation_url': u'https://developer.github.com/v3/users/keys/#create-a-public-key', u'message': u'Validation Failed', u'errors': [{u'field': u'key', u'message': u'key is already in use', u'code': u'custom', u'resource': u'PublicKey'}]}
-
sounds like you already set up ssh keys. so you should be able to set up the remote url using ssh.
-
@JonB said:
sounds like you already set up ssh keys. so you should be able to set up the remote url using ssh.
Ok, I appreciate it.
Happy to work ssh on stash out myself, but can you tell me where to start?
I appreciate all your helpEDIT: Dulwich error on SSH
[alphabear-solver]$ git remote origin ssh://git@github.com/wizardofozzie/alphabear-solver.git [alphabear-solver]$ git push Attempting to push to: ssh://git@github.com/wizardofozzie/alphabear-solver.git, branch: refs/heads/master [alphabear-solver]$ git push Attempting to push to: ssh://git@github.com/wizardofozzie/alphabear-solver.git, branch: refs/heads/master stash: <class 'dulwich.errors.HangupException'>: The remote server unexpectedly closed the connection. [alphabear-solver]$ ```
-
you seem to have a real iffy connection ( your earlier entry had a bunch of those hangup errors, followed by success). I think that literally meant that your connection was dropped. Just try git push a few times until you get something other than this error.
Are you on wifi or wireless? Or dial up?
I am going to write a ping command for stash tonight, and maybe we can test your connection. I am not sure, but it is likely that both errors could be caused by your connection literally dropping out.
-
I am on Wifi swapping to 4G when it fails (in pasted log)
As I said in Slack, updating dulwich as per your recommendation, seems to have done the trick.
There was an error saying something about an error renaming to dulwich.old but restarting worked