如何将HG版本库推送到Git服务器?

目的

习惯使用HG来进行版本管理,但是GitHub代码统计比Bitbucket要丰富,所以准备主力仓库选用Bitbucket,GitHub作为备用仓库.

GitHub本身不支持 HG 版本库,所以需要用到HG-Git扩展插件来实现转义或翻译Git类型的版本库.

参考资料

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

  2. Hg-Git Mercurial Plugin

  3. durin42 / hg-git — Bitbucket

  4. Set up an SSH key - Atlassian Documentation

TortoiseHg 启用 HG-Git 的方法

Windows 版本的 TortoiseHg 已经集成了 HG-Git 扩展插件 (及其必备运行环境 Dulwich) ,因此只需要在 .hgrc 配置文件里设置一下即可启动.

[extensions]
hggit =

填坑记录

几种 Git 仓库地址的区别

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

    权限支持:可读 可写.

    GitHub 内建的克隆方式.

    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@

附件列表

将HG版本库推送到Git服务器的更多相关文章

  1. 定时取数据库的schema,并推送到git服务器

    写了个脚本,定时去数据库取schema,并推送到公司的git里. #daily_schema.py #/usr/bin/env python import os import datetime,tim ...

  2. git初始化本地项目并推送到git服务器

    1.创建本地项目,在项目根目录执行git init命令 git init 2.在git服务器上创建一个仓库,这里使用GitHub创建一个仓库. 3.执行git remote add origin &l ...

  3. Git push将本地版本库的分支推送到远程服务器上对应的分支

    在使用git commit命令将修改从暂存区提交到本地版本库后,只剩下最后一步将本地版本库的分支推送到远程服务器上对应的分支了,如果不清楚版本库的构成,可以查看我的另一篇,git 仓库的基本结构. g ...

  4. git 版本落后推送错误

     http://114.215.90.144/student_association/student.git ! [rejected]        master -> master (non- ...

  5. Vs中提交了代码但是不想推送到Git中

    1:首先就是我fix code 是要提交上去的,所以我就开始提交呢,但是,一看提交后,还没有推送到git就是现在下面的这个状态 上面这个是==> 这是先新增的文件,第一步.但是第一步就差推送了, ...

  6. JavaCV 采集摄像头和麦克风数据推送到流媒体服务器

    越来越觉得放弃JavaCV FFmpeg native API,直接使用JavaCV二次封装的API开发是很明智的选择,使用JavaCV二次封装的API开发避免了各种内存操作不当引起的crash. 上 ...

  7. 上传文件到服务器端后进一步推送到sftp服务器

    扩展安装 要想sftp服务端发送文件,就需要php脚本具有作为ssh客户端的能力,所以需先为php安装如下扩展 openssl openssl-dev libssh php ssh 扩展 按照下面的命 ...

  8. javaCV开发详解之6:本地音频(话筒设备)和视频(摄像头)抓取、混合并推送(录制)到服务器(本地)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

  9. windows环境下,spring boot服务使用docker打包成镜像并推送到云服务器私有仓库

    最近在淘宝上学习springcloud教程,其中有几节课是讲解讲本地springboot服务打包成镜像并推送到云服务器私有仓库,但是教程里面用的事Mac环境,我的是Windows环境,而且课程里面没有 ...

随机推荐

  1. Ubuntu 16.04搭建OpenVPN服务器以及客户端的使用

    说明:启动时注意用户权限,比如root用户启动. Ubuntu: 服务器环境:Ubuntu 16.04 64位系统 内网IP:10.143.80.116 外网IP:203.195.1.2 OpenVP ...

  2. CentOS 6.9使用iptables搭建网关服务器(转)

    条件: 网关服务器IP:172.16.0.1,并且可以连接到外网 客户端IP:172.16.0.0/24 1.开启转发支持forward /etc/sysctl.conf net.ipv4.ip_fo ...

  3. 如何还原phpstorm默认设置

    我不知道phpstorm有没有这个功能,反正我是没找到. 首先,找到phpstorm的配置文件,一般在C:\Users\Administrator 每个人的都可能不一样. 如果phpstorm打开的话 ...

  4. TCP协议中的重传、慢启动、SACK、窗口的概念

    重传机制     慢启动相关的几个状态说明该     SACK机制     窗口在TCP传输机制中的作用

  5. VB里的TEXT控件只能输入数字的代码

    " '先声明一个常量,并把你想禁用或允许输入的内容赋值给它 Private Sub Text1_KeyPress(KeyAscii As Integer) '只能输入数字 KeyAscii ...

  6. 拍拍CPS入门使用

    1.新建应用,获取应用相应的appOAuthID.appOAuthKey.accessToken(这个一点击获取就会改变的,而且最长有效期为3个月,失效了需要重新获取) http://fuwu.pai ...

  7. Tomcat 访问 Manager App,Host Manager

     1.启动tomcat,在浏览器输入:http://localhost:8080/ 2.配置tomcat-users.xml 文件 在主目录的cong文件夹下找到tomcat-users.xml 文件 ...

  8. Spark 开发环境搭建

    原文见   http://xiguada.org/spark-develop/ 本文基于Spark 0.9.0,由于它基于Scala 2.10,因此必须安装Scala 2.10,否则将无法运行Spar ...

  9. 解决SSH窗口关闭,linux上的应用也关闭

    最近在应用linux上的服务的时候发现一个问题 使用SSH远程连接启动的应用在SSH关闭的时候也死掉了,网上查了一下原因 大致是说SSH在关闭的时候会发送一个终止的指令给应用,然后就停了 简要的解决办 ...

  10. (转)scala apply方法 笔记

    在akka源码中有这样一个Cluster类. 使用方法是这样的:val cluster = Cluster(context.system); 作为scala菜鸟的我,并没有找到Cluster(syst ...