Cloning a read-write github repository using TortoiseHg

I’m trying to clone my personal fork on github using the git+ssh protocol with TortoiseHg. It’s giving me a rather strange error. Here is the command

hg clone git+ssh://git@github.com:myusername/thefork.git

This is after I have installed the hg-git module and it works just fine to clone using the git:// syntax. But I believe it’s having trouble with the ssh. The error I’m getting is this.

  • Is there a difference between git reset --hard HEAD and git checkout .?
  • Can I make git merge --ff act like --ff-only?
  • Merge from upstream branch to vendor branch, where vendor branch contains a subset of the upstream commits
  • Permissions with Git Post-Receive
  • How to use my changes for merge in git?
  • managing permissions between windows and mac git commiters
  • importing Hg objects into Git
    [Error 2] The system cannot find the file specified
    

    I have tried adding manually the ssh command into the mercurial.ini file like this

    [ui]
    username = email@address.com
    ssh="C:\Program Files\TortoiseHg\TortoisePlink.exe" -ssh -2 -i "C:\Source\SSHPrivateKey.ppk"
    

    But I still get the same error. Any ideas?

    Update 1

    If I run the same command from the Git Bash shell it works just fine. I get this.

    importing Hg objects into Git
    Counting objects: 1559, done.
    Compressing objects: 100% (586/586), done.
    Total 1559 (delta 960), reused 1534 (delta 947)
    importing Git objects into Hg
    at:  0/86
    updating to branch default
    219 files updated, 0 files merged, 0 files removed, 0 files unresolved
    

    I’m assuming it’s because it can find ssh.exe and my key is already imported. I can add the path of ssh.exe to the windows command prompts path and then instead of the previous error I get this.

    importing Hg objects into Git
    Permission denied (publickey).
    abort: the remote end hung up unexpectedly
    

    It seems that it’s looking specifically for ssh.exe eventhough I have specified the alternate ssh path in mercurial.ini. But my guess here is that that configuration is only for a ssh enabled mercurial server and doesn’t apply to the hg-git plugin.

  • Using someone else's repo as a Git Submodule on GitHub
  • Git “Fetch URL” and “Push URL”, whats the difference?
  • git Installer didn't update bin path for version 1.7.8.4?
  • Jenkins git plugin with ssh access to bitbucket: Permission denied (publickey). fatal: Could not read from remote repository
  • Can a local Git clone be considered a complete backup of the repo it was cloned from?
  • How to compare files from two different branches?
  • 5 Solutions collect form web for “Cloning a read-write github repository using TortoiseHg”

    I have found a way around this but it’s pretty hackish. I noticed that ProcessMonitor was showing it looking for ssh.exe in several different paths so I copied the TortoisePlink.exe in the TortoiseHg folder and named it ssh.exe.

    copy "C:\Program Files\TortoiseHg\TortoisePlink.exe" "C:\Program Files\TortoiseHg\ssh.exe"
    

    With just this change it will still fail the authentication. You’ll get a pop-up box and this.

    importing Hg objects into Git
    abort: the remote end hung up unexpectedly
    

    So you need to get a hold of pageant.exe that comes with the main PuTTy install. Start that up and add your key to it. Then run the clone command again and it should authenticate just fine.

    After spending hours and hours trying to solve this, I’ve found one guide what explained it perfectly.

    This is the URL:
    http://www.codeproject.com/Articles/376058/Step-by-step-Setup-TortoiseHg-for-gitHub

    One thing not mentioned in the guide is that the 32-bit version of Pageant bundled with TortoiseHG cannot recognise the “git@” part in an url, and keeps asking for it. Downloading the 64-bit version of Pageant fixes this bug.

    Download 64-bit Pageant:
    https://splunk.net/w/PuTTy64bit

    I’ve opened a ticket for including 64-bit Pageant with TortoiseHG:
    https://bitbucket.org/tortoisehg/thg/issue/2145/bundle-64-bit-pageant-with-64-bit

    I’m using “plink.exe” and “pageant.exe” instead of “TortoisePlink.exe”. “pageant.exe” provides the pass phrase automatically when “plink.exe” needs it.

    I solved this problem by copying TortoisePlink.exe to ssh.exe. Then I placed ssh.exe in my path. As long as pageant is running, that works for me.

    Given that I needed ssh.exe in my path, I wonder if hggit even reads the ssh= line at all.

    This is still hackish, but a little less hackish than @Nathan’s technique (I’m not a fan of messing with files inside \Program Files)

    I found I had to launch Pageant and load my SSH key and then initially clone using the command-line e.g.:

    hg clone git+ssh://git@github.com/<username>/<repo>.git
    

    But from then on I could use TortoiseHg against GitHub (push and pull) just fine (although Pageant needs to be running for authentication to work).

    Git Baby is a git and github fan, let's start git clone.