用Git原生Clone命令克隆指定Commit的方法.pdf

上传人:C*** 文档编号:9224953 上传时间:2021-05-10 格式:PDF 页数:7 大小:282.21KB
收藏 版权申诉 举报 下载
用Git原生Clone命令克隆指定Commit的方法.pdf_第1页
第1页 / 共7页
用Git原生Clone命令克隆指定Commit的方法.pdf_第2页
第2页 / 共7页
用Git原生Clone命令克隆指定Commit的方法.pdf_第3页
第3页 / 共7页
文档描述:

《用Git原生Clone命令克隆指定Commit的方法.pdf》由会员分享,可在线阅读,更多相关《用Git原生Clone命令克隆指定Commit的方法.pdf(7页完成版)》请在专利查询网上搜索。

1、(19)中华人民共和国国家知识产权局 (12)发明专利申请 (10)申请公布号 (43)申请公布日 (21)申请号 202010235316.4 (22)申请日 2020.03.30 (71)申请人 北京简单一点科技有限公司 地址 100000 北京市海淀区中关村大街18 号12层1225-108 (72)发明人 刘庆 (51)Int.Cl. G06F 8/71(2018.01) (54)发明名称 一种用Git原生Clone命令克隆指定Commit 的方法 (57)摘要 本发明提供了一种用Git原生Clone命令克 隆指定Commit的方法, 包括以下步骤: (1)当用户 通过用户原生Git客。

2、户端向Git原生服务器发送 普通Git命令时, 首先用户通过用户原生Git客户 端向Git原生服务器发送普通Gitclone命令或 者其他git命令; (2)用户命令拦截器拦截用户命 令, 若发现用户命令为普通git命令, 则不做任何 额外处理, 并将用户命令发送给Git原生服务器; (3)Git原生服务器接收用户命令, 并将返回信息 按照原路径返回至用户原生Git客户端; 本发明 提供一种可以克隆Git指定Commit的方法, 大幅 提升在只需要单commit场景下的clone(克隆)效 率。 权利要求书1页 说明书4页 附图1页 CN 111427615 A 2020.07.17 CN 1。

3、11427615 A 1.一种用Git原生Clone命令克隆指定Commit的方法, 其特征在于, 包括用户原生Git客 户端和Git原生服务器, 在用户原生Git客户端与Git原生服务器之间设置用户命令拦截器; 具有以下步骤: (1)当用户通过用户原生Git客户端向Git原生服务器发送普通Git命令时, 首先用户通 过用户原生Git客户端向Git原生服务器发送普通Git clone命令或者其他git命令; (2)用户命令拦截器拦截用户命令, 若发现用户命令为普通git命令, 则不做任何额外 处理, 并将用户命令发送给Git原生服务器; (3)Git原生服务器接收用户命令, 并将返回信息按照原。

4、路径返回至用户原生Git客户 端; (4)当用户通过用户原生Git客户端向Git原生服务器发送包含指定commit信息的 gitclone-depth1命令, 假设commit ID为A,其中A表示一个40位的真实commit ID值; commit信息可以在代码库URL中以特殊标志携带,或者git clone命令后续版本支持服务器 端参数-server-option之后, 通过此参数指定; (5)用户命令拦截器解析到用户的git clone-depth1命令, 并解析出其中的40位 commit ID信息A; (6)用户命令拦截器向git原生服务器查询该commit A是否存在; (7)Gi。

5、t原生服务器向用户命令拦截器返回查询结果; (8)如果该commit A不存在, 用户命令拦截器向用户原生Git客户端返回错误信息, 流 程结束; (9)如果该commit A存在, 步骤(6)在查询操作完成后, 不再进行正常的git对象清点来 找出最新的commit信息, 而是伪造清点结果, 直接答复用户原生Git客户端, 最新的commit 就是用户指定的commit A; (10)按照git clone命令的通信协议, git clone命令接收到步骤(9)返回的信息, 获知 Git原生服务器中最新commit的就是commit A, 然后会向Git原生服务器发送真正的下载请 求, 并且。

6、在下载请求中告诉Git原生服务器, 用户原生Git客户端本地have 0commit,want commit A, depth1其中have和want是git clone命令通信协议中的数据报文字段; (11)用户命令拦截器收到步骤(10)中的用户原生Git客户端请求, 向Git原生服务器发 送数据打包命令, 并且强制设定打包深度depth1, 将commit A的代码数据单独打包; (12)用户命令拦截器收到commit A的代码数据包, 并且将后数据包回传至用户原生 Git客户端。 (13)用户原生Git客户端接收到步骤(12)中回传的数据, 下载了commit A, 并且只有A 一个co。

7、mmit; 由于在步骤(4)中git clone使用了-depth1参数, 故commit A数据可通过 用户原生Git客户端数据检验。 权利要求书 1/1 页 2 CN 111427615 A 2 一种用Git原生Clone命令克隆指定Commit的方法 技术领域 0001 本发明涉及一种克隆指定Commit的方法, 具体是一种用Git原生Clone命令克隆指 定Commit的方法。 背景技术 0002 Git目前已经成为全球最为广泛使用的分布式版本控制系统, 用户可以通过客户 端向服务器端提交(Push)或者下载(Clone/Pull/fetch)代码。 用户的代码变更以commit粒 度。

8、作为一次变更历史, 每次客户端向服务器端提交提交(Push)或者下载(Clone/Pull/ fetch)代码可以包含若干个commit。 其中Git clone命令默认是下载服务器端的整个代码 提交历史。 Gitpull和Git fetch命名是在客户端已经通过git clone命令获取了服务器端 代码的基础上, 进行差异部分的增量下载。 0003 但是在一些场合, 例如大型分布式构建系统, 每次进行代码构建时, 因为不可能在 构建机器上把所有代码库全部都先git clone缓存起来之后再进行git pull/fetch进行增 量下载。 所以在构建时, 需要直接使用git clone命令进行。

9、代码下载。 这样的话, 虽然实际代 码构建仅需要某个指定commit的代码, 但是需要把代码库的全部历史下载下来, 效率非常 低。 0004 Git原生Clone命令: 为了提升git clone(克隆)命令的效率, git clone提供了浅 克隆的方法, 具体方式为通过-depth参数指定克隆深度, 例如: git clone-depth10表 示只克隆最后的10个commit, 能在一定程度上避免clone全部代码历史的巨大浪费。 但是, Git原生克隆命令只能clone(克隆)最新的若干个提交历史(commit), 不能对指定的单个提 交历史(commit)进行clone(克隆)。 例。

10、如对于自动化构建系统, 因为需要对非最新的代码历 史进行重新构建, 浅克隆的深度无法确定, 所以无法解决此问题。 且浅克隆也是把最新的若 干次历史全部克隆下来, 不能精确对指定的单个提交历史(commit)进行精确clone(克隆), 也存在效率浪费。 0005 国外厂商Github/谷歌Gerrit: 提供了git fetch指定commit的方式下载指定 commit。 但是, 使用git fetch命令, 需要用户先在本地通过git init初始化一个代码库, 然 后通过git remote add origin命令添加远程仓库, 最后通过git fetch进行下载三个步 骤, 命令繁琐。

11、, 学习成本较高。 发明内容 0006 本发明的目的在于提供一种用Git原生Clone命令克隆指定Commit的方法, 以解决 上述背景技术中提出的问题。 0007 为实现上述目的, 本发明提供如下技术方案: 0008 一种用Git原生Clone命令克隆指定Commit的方法, 包括用户原生Git客户端和Git 原生服务器, 在用户原生Git客户端与Git原生服务器之间设置用户命令拦截器; 具有以下 步骤: 说明书 1/4 页 3 CN 111427615 A 3 0009 (1)当用户通过用户原生Git客户端向Git原生服务器发送普通Git命令时, 首先用 户通过用户原生Git客户端向Git。

12、原生服务器发送普通Git clone命令或者其他git命令; 0010 (2)用户命令拦截器拦截用户命令, 若发现用户命令为普通git命令, 则不做任何 额外处理, 并将用户命令发送给Git原生服务器; 0011 (3)Git原生服务器接收用户命令, 并将返回信息按照原路径返回至用户原生Git 客户端; 0012 (4)当用户通过用户原生Git客户端向Git原生服务器发送包含指定commit信息的 gitclone-depth1命令, 假设commit ID为A,其中A表示一个40位的真实commit ID值; 0013 commit信息可以在代码库URL中以特殊标志携带,或者git clon。

13、e命令后续版本支 持服务器端参数-server-option之后, 通过此参数指定; 0014 (5)用户命令拦截器解析到用户的git clone-depth1命令, 并解析出其中的40 位commit ID信息A; 0015 (6)用户命令拦截器向git原生服务器查询该commit A是否存在; 0016 (7)Git原生服务器向用户命令拦截器返回查询结果; 0017 (8)如果该commit A不存在, 用户命令拦截器向用户原生Git客户端返回错误信 息, 流程结束; 0018 (9)如果该commit A存在, 步骤(6)在查询操作完成后, 不再进行正常的git对象清 点来找出最新的co。

14、mmit信息, 而是伪造清点结果, 直接答复用户原生Git客户端, 最新的 commit就是用户指定的commit A; 0019 (10)按照git clone命令的通信协议, git clone命令接收到步骤(9)返回的信息, 获知Git原生服务器中最新commit的就是commit A, 然后会向Git原生服务器发送真正的下 载请求, 并且在下载请求中告诉Git原生服务器, 用户原生Git客户端本地have 0commit, want commit A, depth1其中have和want是git clone命令通信协议中的数据报文字段; 0020 (11)用户命令拦截器收到步骤(10)。

15、中的用户原生Git客户端请求, 向Git原生服务 器发送数据打包命令, 并且强制设定打包深度depth1, 将commit A的代码数据单独打包; 0021 (12)用户命令拦截器收到commit A的代码数据包, 并且将后数据包回传至用户原 生Git客户端。 0022 (13)用户原生Git客户端接收到步骤(12)中回传的数据, 下载了commit A, 并且只 有A一个commit; 由于在步骤(4)中git clone使用了-depth1参数, 故commit A数据可通 过用户原生Git客户端数据检验。 0023 与现有技术相比, 本发明的有益效果是: 0024 本发明提供一种可以克隆。

16、Git指定Commit的方法, 大幅提升在只需要单commit场 景下的clone(克隆)效率; 本方法使得git原生clone命令具备clone指定commit的能力, 在 只需要单个commit文件内容的场景, 大幅度提升git clone的效率。 通过在用户原生Git客 户端和Git原生服务器之间增加用户命令拦截器进行命令截获及数据修改, 使用git原生 clone命令及参数实现对任意指定的代码历史进行下载, 用户命令拦截器通过伪造最新 commit信息, 从而达到欺骗git clone命令的目的, 让git clone命令误以为服务器端最新 commit为指定的commit; 对指定c。

17、ommit数据进行打包时, 强制设置打包深度为1, 只进行单 commit数据打包。 说明书 2/4 页 4 CN 111427615 A 4 附图说明 0025 图1为一种用Git原生Clone命令克隆指定Commit的方法的整体技术示意图。 0026 图2为一种用Git原生Clone命令克隆指定Commit的方法中工作流程。 具体实施方式 0027 下面结合具体实施方式对本专利的技术方案作进一步详细地说明。 0028 请参阅图1-2, 一种用Git原生Clone命令克隆指定Commit的方法, 包括用户原生 Git客户端和Git原生服务器, 在用户原生Git客户端与Git原生服务器之间设置。

18、用户命令拦 截器, 用户原生Git客户端用以发送git命令, 用户命令拦截器用以对用户命令进行处理、 以 及对数据进行改写, Git原生服务器用以存储代码版本信息; 具有以下步骤: 0029 (1)当用户通过用户原生Git客户端向Git原生服务器发送普通Git命令时, 首先用 户通过用户原生Git客户端向Git原生服务器发送普通Git clone命令或者其他git命令, 如 图2中箭头1所示; 0030 (2)用户命令拦截器拦截用户命令, 若发现用户命令为普通git命令, 则不做任何 额外处理, 并将用户命令发送给Git原生服务器, 如图2中箭头2所示; 0031 (3)Git原生服务器接收用。

19、户命令, 并将返回信息按照原路径返回至用户原生Git 客户端, 如图2中箭头3、 箭头4所示; 0032 (4)当用户通过用户原生Git客户端向Git原生服务器发送包含指定commit信息的 gitclone-depth1命令, 假设commit ID为A,其中A表示一个40位的真实commit ID值; commit信息可以在代码库URL中以特殊标志携带,或者git clone命令后续版本支持服务器 端参数-server-option之后, 通过此参数指定(当前git clone命令尚不支持此参数), 如图 2中箭头1所示; 0033 (5)用户命令拦截器解析到用户的git clone-de。

20、pth1命令, 并解析出其中的40 位commit ID信息A; 0034 (6)用户命令拦截器向git原生服务器查询该commit A是否存在, 如图2中箭头2所 示; 0035 (7)Git原生服务器向用户命令拦截器返回查询结果, 如图2中箭头3所示; 0036 (8)如果该commit A不存在, 用户命令拦截器向用户原生Git客户端返回错误信 息, 流程结束, 如图2中箭头4所示; 0037 (9)如果该commit A存在, 步骤(6)在查询操作完成后, 不再进行正常的git对象清 点来找出最新的commit信息, 而是伪造清点结果, 直接答复用户原生Git客户端, 最新的 comm。

21、it就是用户指定的commit A, 如图2中箭头4所示; 0038 (10)按照git clone命令的通信协议, git clone命令接收到步骤(9)返回的信息, 获知Git原生服务器中最新commit的就是commit A, 然后会向Git原生服务器发送真正的下 载请求, 并且在下载请求中告诉Git原生服务器, 用户原生Git客户端本地have 0commit, want commit A,depth1(其中have和want是git clone命令通信协议中的数据报文字 段), 如图2中箭头5所示; 0039 (11)用户命令拦截器收到步骤(10)中的用户原生Git客户端请求, 向G。

22、it原生服务 器发送数据打包命令, 并且强制设定打包深度depth1, 将commit A的代码数据单独打包, 说明书 3/4 页 5 CN 111427615 A 5 如图2中箭头6所示; 0040 (12)用户命令拦截器收到commit A的代码数据包, 并且将后数据包回传至用户原 生Git客户端, 如图2中箭头7、 箭头8所示。 0041 (13)用户原生Git客户端接收到步骤(12)中回传的数据, 下载了commit A, 并且只 有A一个commit; 由于在步骤(4)中git clone使用了-depth1参数, 故commit A数据可通 过用户原生Git客户端数据检验。 004。

23、2 工作原理: 通过在用户git客户端和Git代码服务器之间增加用户命令拦截器进行 命令截获及数据修改, 使用git原生clone命令及参数实现对任意指定的代码历史进行下 载, 用户命令拦截器通过伪造最新commit信息, 从而达到欺骗git clone命令的目的, 让git clone命令误以为服务器端最新commit为指定的commit。 对指定commit数据进行打包时, 强 制设置打包深度为1, 进行单commit数据打包。 0043 上面对本专利的较佳实施方式作了详细说明, 但是本专利并不限于上述实施方 式, 在本领域的普通技术人员所具备的知识范围内, 还可以在不脱离本专利宗旨的前提下 做出各种变化。 说明书 4/4 页 6 CN 111427615 A 6 图1 图2 说明书附图 1/1 页 7 CN 111427615 A 7 。

展开阅读全文
内容关键字: Git 原生 Clone 命令 克隆 指定 Commit 方法
关于本文
本文标题:用Git原生Clone命令克隆指定Commit的方法.pdf
链接地址:https://www.zhuanlichaxun.net/pdf/9224953.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1