將HG版本庫推送到Git服務器

如何將HG版本庫推送到Git服務器?

目的

習慣使用HG來進行版本管理,可是GitHub代碼統計比Bitbucket要豐富,因此準備主力倉庫選用Bitbucket,GitHub做爲備用倉庫. php

GitHub自己不支持 HG 版本庫,因此須要用到HG-Git擴展插件來實現轉義或翻譯Git類型的版本庫.html

參考資料

  1. 9. Use with other VCS systems — TortoiseHg 3.8.0 documentationlinux

  2. Hg-Git Mercurial Plugingit

  3. durin42 / hg-git — Bitbucketgithub

  4. Set up an SSH key - Atlassian Documentationshell

TortoiseHg 啓用 HG-Git 的方法

Windows 版本的 TortoiseHg 已經集成了 HG-Git 擴展插件 (及其必備運行環境 Dulwich) ,所以只須要在 .hgrc 配置文件裏設置一下便可啓動.windows

[extensions]
hggit =

填坑記錄

幾種 Git 倉庫地址的區別

  1. https://github.com/schacon/hg-git.git緩存

    權限支持:可讀 可寫.
    GitHub 內建的克隆方式.bash

    HG-Git 支持.服務器

    使用此格式的地址克隆倉庫時會出錯提示:
    停止: No module named selectors!

  2. git@github.com:schacon/hg-git.git

    權限支持:可讀 可寫.
    GitHub 內建的克隆方式. 須要 SSH key 和 passphrase.

    HG-Git 支持.

    使用此格式的地址克隆倉庫時會出錯提示:
    系統找不到指定的路徑。停止: git remote error: The remote server unexpectedly closed the connection.

  3. git://github.com/schacon/hg-git.git

    權限支持:

    HG-Git 支持經過此格式 克隆倉庫 到本地.

    可是一旦推送本地修改到服務器,就會報錯git remote error: You can't push to git://.git Use https://.git
    參考資料:

    1. fatal: remote error: You can't push to git (Example)
    2. Git Bash: remote error: You can't push to git://github.com/ - Stack Overflow
  4. git+ssh://git@github.com/schacon/hg-git.git

    如下引用自:durin42 / hg-git - Usage — Bitbucket

    If you want to clone a github repository for later pushing (or any other repository you access via ssh), you need to convert the ssh url to a format with an explicit protocol prefix.

    For example, the git url with push access

    git@github.com:schacon/hg-git.git

    would read

    git+ssh://git@github.com/schacon/hg-git.git

    (Mind the switch from colon to slash after the host!)

    翻譯以下:

    假如須要克隆一個支持後續推送的倉庫,
    那麼就須要將 SSH URL 轉換爲一種特定的協議前綴(git+ssh://)的格式.

    例如原地址爲
    git@github.com:schacon/hg-git.git

    須要轉換爲
    git+ssh://git@github.com/schacon/hg-git.git

    注意原地址域名後面的冒號以後的部分須要特別留意.

如何推送修改到一個現成的 Git 倉庫?

  1. 獲得目標 Git 倉庫的 SSH 地址

    例如: git@github.com:schacon/hg-git.git

  2. 將其轉換爲特定的格式

    例如: git+ssh://git@github.com/schacon/hg-git.git

  3. 生成 SSH 私鑰公鑰

    在線的方式生成(不用安裝特殊軟件):

    1. Free Online Private and Public Key Generator
    2. Online RSA Key Generator
    3. ONLINE Generate ssh RSA key,public key,private key,generate ssh pair
    4. Online Generate SSH keys algorithm RSA,DSA,ECDSA

    經過軟件生成:

    1. TortoiseGit生成.PPK拓展名的密鑰 - CSDN博客
    2. liunx----putty--ssh--ppk---密文自動登錄 - CSDN博客
    3. How to use ssh-keygen to generate a new SSH key | SSH.COM
    4. Using PuTTYgen on Windows to generate SSH key pairs | SSH.COM
  4. 將公鑰添加到GitHub

  5. 將私鑰轉換爲*.PPK格式

    1. Convert SSH private key with PuTTY keygen : Some tutorials and articles
    2. linux私鑰id_rsa轉換成ppk - CSDN博客
    3. Site5 KnowledgeBase » SSH: Convert SSH Keys to PPK Format
    4. How to convert PuTTY's .ppk to SSH key
    5. Converting OpenSSH and PuTTY Style Keys
    6. Use SSH Keys with PuTTY on Windows | ProfitBricks DevOps Central
  6. 修改配置文件

    [ui]
    username = AsionTang
    ssh = "D:\TortoisePlink.exe" -ssh -2 -C -i "D:\ye.github.ppk"
  7. 接受並緩存GitHub的Host Key

如何克隆一個現成的 Git 倉庫到本地?

找到正確的 Git 倉庫地址
例如 https://github.com/schacon/hg-git
將其修改成 git://github.com/schacon/hg-git.git 同樣格式的地址,正常克隆便可.

SSH 鏈接時出現錯誤Unable to use key file "id_ras" (OpenSSH SSH-2 private key (old PEM format))

將PEM私鑰格式轉換爲*.PPK格式便可.

SSH 鏈接時出現錯誤Server refused our key

將倉庫地址從 git+ssh://github.com/schacon/hg-git.git 改成 git+ssh://git@github.com/schacon/hg-git.git 後解決此問題. 在域名前多了個用戶名 git@

附件列表

相關文章
相關標籤/搜索