关于
Git HTTP 服务器是代码托管服务最重要的组件之一,Git HTTP 服务器将 HTTP 请求的数据写入到 git-upload-pack/git-receive-pack 的标准输入,然后读取 git-upload-pack/git-receive-pack 的输出,写入 HTTP 响应包体,然后传输给客户端。原理非常简单。
前言
从前言开始,便又要讲起 git 原理,多次讲起不胜其烦,诸位如果要了解 git 原理可以通过 bing google 或者其他搜索引擎从网络上查阅资料,也可以去 git-scm.com 网站查看 《Pro Git》,对于大多数开发者而言已是足够。
先说说公司的吧:
最初开发了 Miracle 项目,这个项目是 nginx 动态代理和 svn 动态代理,然后共用路由库 cratos。
后来又开发者 Illusory 项目,最初实现了 git-upload-pack git-receive-pack 的包装,然后后端服务器上运行 git-srv 就可以实现 git 任意协议的动态代理。 为了减少中间环节,新的 ssh 服务器直接与 git-srv 通讯。于是 git-srv 也就改进了。
前言
码云是国内最大的代码托管平台之一。码云基于 Gitlab 5.5 开发,经过几年的开发已经和官方的 Gitlab 有了很大的不同。 为了支撑更大的用户规模,码云也在不断的改进,而本文也主要分享码云分布式 Brzo GIT HTTP 服务器的开发经验。
前言
笔者计划开发一个自用的包管理工具,需要支持下载功能,笔者尝试了多种 Windows 下载 API,这里分享出来。
URLDownloadToFile
自 Internet Explorer 3.0 开始,Urlmon.dll 中开始提供 URLDownloadToFile,支持从远程服务器上下载文件到本地。 URLDownloadToFile 会先将文件下载到 IE 缓存目录,然后再复制到设置的输出目录,如果第二次下载,就省去了下载时间。 Urlmon 还提供了下载到缓存目录的函数 URLDownloadToCacheFile,正因为 URLDownloadToFile 先下载到缓存目录, 就会出现缓存问题,可以使用 Wininet 中的 DeleteUrlCacheEntry 删除缓存。
前言
作为一个提供免费私有仓库的代码托管平台,码云要考虑利用现有的硬件资源支持更多的用户,一些用户占用较多的硬件资源实际上是对其他用户用户体验的一种损害,因此码云对用户的存储库大小有一定的限制。
GIT 传输协议实现
在 GIT 的三种主流传输协议 HTTP SSH GIT 中,GIT 协议是最少被使用的协议(也就是 URL 以 git://
开始的协议)。
这是由于 git 协议的权限控制几乎没有,要么全部可读,要么全部可写,要么全部可读写。所以对于代码托管平台来说,
git 协议的目的仅仅是为了支持 公开项目的只读访问。
GIT 存储格式与运用
在 GIT 的实现规范中,存储格式是非常简单而且高效的,一个代码托管平台通常需要基于这些特性实现一非常有意思的功能。 在本文中,将介绍基于 GIT 存储库格式实现的仓库体积限制与大文件检查。
Windows 10 原生 SSH 功能探索
在 Windows 10 Insider 14352 中,增加了两个服务 SshBrokerGroup SshProxyGroup, 通过命令
netstat -aon |findstr "22"
即可找到 端口 22 绑定的进程也就是 SshProxyGroup 服务进程,而 22 端口是 SSH 服务器监听的端口, 在 Windows 目录 C:\Windows\System32 可以发现 几个与 SSH 相关的 dll 和 exe:
Windows Containers 与 Project Centennial
随着 Windows 10 Redstone 和 Windows Server 2016 发布日益临近,一些重要的功能也逐渐披露到公众面前。 最让笔者觉得有意思的是 Containers 功能。笔者曾经写过一篇关于应用程序降权的文章: Windows AppContainer 降权,隔离与安全 ) 提到了 如何降低应用程序进程权限,与 Containers 相比,AppContainer 并未将进程与操作系统完全隔离开来,计算资源并不能自定义限制, 并且很多一部分 Win32 API 都无法在基于 AppContainer 创建的进程中运行。