ubuntu 16.04执行git clone时失败“RPC failed; curl 56 GnuTLS recv error (-9): A TLS packet with unexpected length was received.”

前几天从github下载代码的时候,一直失败,提示如下:

如果操作系统的语言是英文的话,输出如下内容:

刚刚开始以为是由于GnuTLSBUG导致的。

当时的解决方法是翻墙出去进行克隆。或者用Windows进行克隆操作。

然而,从最近的新闻来看,更像是遭受了攻击导致的。

继续阅读ubuntu 16.04执行git clone时失败“RPC failed; curl 56 GnuTLS recv error (-9): A TLS packet with unexpected length was received.”

Ubuntu 16.04下同步github中fork出来的分支

githubfork出一些感觉比较好的项目,已经做了部分修改,由于某些原因,无法通过pull request合并到原作者的分支,但是想把原项目的最近更新代码合并进来,可以通过git fetch原始项目到本地,通过git merge的进行代码合并。

fork出来的pyseeta项目为例

  • 检出自己的代码

  • 把原作者项目地址添加到刚刚检出的项目

  • 从原作者仓库获取到分支,及相关的提交信息

  • 切换到想合并代码的分支

  • 代码合并,并解决冲突

  • 提交合并后的代码

  • 推送提交到远程服务器

参考链接


如何同步 Github fork 出来的分支

使用Git Submodule管理子模块

我们经常会引用第三方的开源项目或者其他人的项目到自己的项目中来,如果直接拷贝代码,那么就需要每次他人修改后,手工同步代码,导致整个的工作量非常大。git submodule使得我们可以把他人的项目作为我们自己的子项目来进行管理,当对方修改后,一个简单的同步命令就可以完成代码的自动同步,方便我们的开发。

添加一个项目到我们的工程中,比如:

检出主工程代码后,初始化子模块(需要手工执行)

更新同步子模块的代码:

删除子模块的代码:

参考链接


git删除未监视的文件(untracked files)命令用法

gitLinux下删除未监视的文件(untracked files),一般通过命令来执行更方便,具体执行如下:

一般执行

即可。

TortoiseGit 2.4.0.2引入了一个新的BUG,导致无法提交,提示“fatal: protocol error: bad line length character: Welc”

今天(2017.02.27TortoiseGit 2.4.0发布了一个Hotfix来修正几个BUG,网站上的具体的版本信息如下:

2017-02-25 | Released TortoiseGit Hotfix 2.4.0.2 (fixes issue #2909 (Commit dialog unclosable) and issue #2911 (Add returns "invalid path") and contains PuTTY 0.68)

但是这次的修复引入了更大的BUG,导致无法提交代码,不管是拉取还是提交代码,都会提示"fatal: protocol error: bad line length character: Welc",如下图:

修复这个问题最简单的方法就是还原到TortoiseGit 2.4.0版本。

这个BUG是由TortoiseGitPlink.exe里面的代码改动引起的,只要还原这个文件到0.67版本(来自TortoiseGit 2.4.0),也可以解决这个问题。

目前已经提交了BUG给开发人员了。对于的BUG链接地址如下:
TortoiseGit 2.4.0.2 bug ( TortoiseGit 2.4.0 works but TortoiseGit 2.4.0.2 can not pull and push) "fatal: protocol error: bad line length character: Welc"

希望能尽快修复这个问题吧!

到目前为止(2017.05.09)这个问题依旧没有修复的可能,因此建议大家可以改用一下SourceTree-2.0.20.1,可以点击这里下载目前最新的版本。

TortoiseGit 与 Putty 配置冲突导致 Server refuse our key

TortoiseGitTortoiseSVNGit版本,TortoiseGit用于迁移TortoiseSVNTortoiseGit,一直以来GitWindows平台没有好用GUI客户端,现在TortoiseGit的出现给Windows开发者带来福音

TortoiseGit原本用得好好的,一日安装了Putty后,问题出现了。。

在进行git操作时提示:

TortoiseGit版本信息:

因为TortoiseGit调用了由Putty修改而来的TortoisePLink,因此Putty的配置将会影响TortoiseGit

解决方法,删除注册表中的以下节点即可:

参考链接:


TortoiseGit 与 Putty 配置冲突导致 Server refuse our key

Git常用命令

Git检出使用SSH-KEY认证的服务器上的源代码:(注意,此处SSH-KEY只能使用绝对路径)

Git提交更改

Git提交代码到使用SSH-KEY认证的服务器master分支:(注意,此处SSH-KEY只能使用绝对路径)

参考链接:


git - 简易指南
specify private SSH-key to use when executing shell command with or without Ruby?

Windows下使用命令行执行需要用SSH keys登录的Git

Windows下使用Git的时候,大家都习惯了使用TortoiseGit来执行操作。但是在某些情况下,必须在Git Bash下面执行命令的时候,就比较麻烦了,尤其是服务器设置了SSH keys登陆的时候。默认情况下,TortoiseGit会自动加载puttygen生成的.PPK文件来完成认证工作,但是在Git Bash 下面,只能是根据Linux下面的配置来进行登陆认证了。

1.在Git Bash中输入“puttygen”,如下图所示:puttygen
弹出如下图形界面:putty_key_generator
对于已经有PPK文件的情况,点击"Load"来加载,没有PPK文件,请点击"Generate"来生成。加载完成后,点击菜单上的“Conversions”按钮,如下图所示:export_openssh_key

导出的文件没有扩展名,命名为“id_rsa”,注意,必须是这个名字,没有扩展名。

2.拷贝文件“id_rsa”到当前用户目录下面的 “.ssh”目录下面,当前用户目录的位置,请在Git Bash中输入“echo ~”来显示出来,最后的结果如下图所示id_rsa

3.在Git Bash中继续执行命令,就可以了!

将已有的Git项目的某个目录分离成独立子模块

当一个项目在开发若干时间后,希望将某个目录单独出一个项目来开发,此时就可以利用这个subtree的功能分离里。

具体的操作方式是这样的:(只能在Git Bash的命令行中操作
1. 首先cd到需要处理的项目的根目录

注意
<name-of-folder> 必须是从工程的根目录开始算起,类似“project/hello/world”的格式。
<name-of-new-branch> 的名字,尽量取简单。

2. 创建一个新的repo(项目)(离开原有的项目的文件夹,在另外的地方新建一个项目

注意
</path/to/big-repo>是我们需要拉取数据的根目录的绝对路径,类似 “D:\Source\Project”的格式。
<name-of-new-branch> 是我们刚刚分离出来的分支的名字。

3. 添加子模块(到原来工程的根目录下面

可以看到,在原来的Git工程的根目录下面增加了一个名为“.gitmodules”的文件,里面的内容如下: