isomorphic-git是在Node.js和浏览器JavaScript环境中起作用的GIT的纯JavaScript重新实现。它可以读写到git存储库,从中获取并推到git遥控器(例如github),所有这些都没有任何本机C ++模块依赖性。
同构GIT的目标是与规范GIT实施的100%互操作性。这意味着它通过在“ .git”目录中修改文件来完成所有操作,就像您习惯的git一样。随附的isogit CLI可以在桌面或服务器上的GIT存储库上操作。
该库的目标是无需组装的完整解决方案。 API的设计是使用现代工具,例如汇总和WebPack。通过将功能作为单个功能提供,代码捆绑器可以通过仅包含应用程序使用的功能来产生较小的捆绑包。
该项目包括类型定义,因此您可以在编辑中享受静态类型检查和智能代码完成,例如VS代码和代码框。
该项目的原始作者(比利·希尔顿(Billie Hilton))离开了该项目,但该项目仍由两名志愿者维护:
但是他们没有编写太多代码,主要是进行代码审查,并尝试回答问题,并且在吉特(Gitter)上,他们只是不想让项目死亡。因此,您可以说这个项目是由社区驱动的(因为Jcubic始终回复问题)。这意味着,如果您希望实现一个功能,则需要自己执行此操作或找到愿意为您编写代码的人。该项目在OpenCollective上有一些钱,如果您发现愿意与某些雄鹿交换的Somoene(可能是您),我们可以将其花在一些开发上,但是我们没有很多,所以不要期望拥有完整的Sallary。
如果您想帮助这个项目,则非常欢迎您这样做。
以下环境在CI中进行了测试,并将继续支持直到下一个破裂版本:
节点10 | Chrome 79 | 边缘79 | Firefox 72 | 野生动物园13 | Android 10 | iOS 13 |
请参阅GitHub和发行博客文章上的完整发行说明。
您可以从NPM安装它:
npm install --save isomorphic-git
isomorphic-git中的“同构”表示相同的代码在服务器或浏览器中运行。这很棘手,因为Git使用文件系统并提出HTTP请求。浏览器没有fs模块。节点和浏览器具有不同的API来提出HTTP请求!
因此, isomorphic-git不再依靠fs和http模块,使您可以携带自己的文件系统和HTTP客户端。
如果您在节点中使用isomorphic-git ,则使用本机fs模块和提供的节点HTTP客户端。
// node.js example
const path = require ( 'path' )
const git = require ( 'isomorphic-git' )
const http = require ( 'isomorphic-git/http/node' )
const fs = require ( 'fs' )
const dir = path . join ( process . cwd ( ) , 'test-clone' )
git . clone ( { fs , http , dir , url : 'https://github.com/isomorphic-git/lightning-fs' } ) . then ( console . log )如果您在浏览器中使用isomorphic-git ,则需要模拟fs API的东西。最简单的设置和大多数性能图书馆是Lightningfs,它是由同一作者编写和维护的,并且是isomorphic-git套件的一部分。如果Lightningfs不符合您的要求,同构GIT也应与Browserfs和Filer一起使用。这次isomorphic-git/http/node而不是同构isomorphic-git/http/web :
< script src =" https://unpkg.com/@isomorphic-git/lightning-fs " > </ script >
< script src =" https://unpkg.com/isomorphic-git " > </ script >
< script type =" module " >
import http from 'https://unpkg.com/isomorphic-git@beta/http/web/index.js'
const fs = new LightningFS ( 'fs' )
const dir = '/test-clone'
git . clone ( { fs , http , dir , url : 'https://github.com/isomorphic-git/lightning-fs' , corsProxy : 'https://cors.isomorphic-git.org' } ) . then ( console . log )
</ script >如果您使用的是ES模块语法,则可以使用默认导入以便方便,或者命名导入,如果您使用的是捆绑器:
import git from 'isomorphic-git'
// or
import * as git from 'isomorphic-git'
// or
import { plugins , clone , commit , push } from 'isomorphic-git'在文档网站上查看完整的入门指南。
然后查看有用的摘要页面,其中包括社区编写的更多示例代码!
不幸的是,由于默认情况下,由于相同的原始策略, isomorphic-git只能从与正在运行的网页相同的来源中克隆。这是非常不便的,因为这意味着出于所有实际目的克隆和推动存储库,必须通过代理来完成。
为此,存在 @Isomorphic-git/cors-proxy,您可以克隆或npm install 。对于测试或小型项目,您还可以使用https://cors.isomorphic-git.org-由Clever Cloud赞助的免费代理。
我希望最终将CORS标题添加到所有主要的Git托管平台上,并将在这里列出我的进度:
| 服务 | 支持CORS请求 |
|---|---|
| Gogs(自主) | ✔ |
| gitea(自主) | ✔ |
| Azure Devops | ✔(用法注:需要身份验证) |
| GitLab | 我的公关被拒绝了,但问题仍然开放! |
| Bitbucket | |
| github |
实际上,添加CORS标题只是两行代码!!简单的东西。肯定会发生。
isogit CLI同构GIT带有一个简单的CLI工具,称为isogit ,因为isomorphic-git类型很多。它实际上只是一个薄的外壳,它将命令行参数转换为等效的JS API命令。因此,您应该能够使用CLI运行任何当前或将来的同构GIT命令。
它始终以一个假设,即当前的工作目录是git根。例如{ dir: '.' } 。
它使用minimisted来解析命令行选项,并将打印出等效的JS命令并精心打印输出JSON。
CLI更像是快速测试isomorphic-git ,并不是真正的git CLI替代品。
该项目遵循语义版本控制,因此我可能会继续更改API,但是除非有主要版本凸起,否则它们将始终兼容。
与我们分享您的问题和想法!我们喜欢那个。您可以在我们的Gitter聊天室中找到我们,或者只是在Github上创建一个问题!我们也是Twitter上的@isomorphicgit。
isomorphic-git开发设置类似于大型Web应用程序的设置。主要区别在于测试中涉及的骇客数量荒谬。我们使用Facebook的玩笑进行测试,这使得TDD快速而有趣,但是我们还使用了自定义骇客,以便使用Karma使用Jasmine在浏览器中运行相同的测试。我们甚至拥有自己的模拟服务器,用于服务GIT存储库测试固定装置!
您需要安装node.js,但其他所有内容都是DevDectionenty。
git clone https://github.com/isomorphic-git/isomorphic-git
cd isomorphic-git
npm install
npm test查看CONTRIBUTING文件以获取更多说明。
没有@Creationix和@chrisdickinson的开拓性工作,同构不可能是不可能的。 git是一个棘手的二进制混乱,没有他们的示例(及其模块!),我甚至无法完成这一目标。他们是之前的天才。
跨浏览器设备测试由以下方式提供:

谢谢这些好人(表情符号钥匙):
威廉·希尔顿 ? ? | wdhtig ? | 马克·麦克劳德(Marc MacLod) ? ? | 布雷特·扎米尔(Brett Zamir) ? | 丹·艾伦 ? ? | TomášHübelbauer ? | 胡安·坎帕 ? |
艾拉·米勒(Ira Miller) ? | Rhys Arkins | 肖恩·拉金(Sean Larkin) | 丹尼尔·鲁夫(Daniel Ruf) | Bokuweb | Hiroki Osame | Jakub Jankiewicz ? |
霍华德戈德 ? | Burningtyger ? | 梅尔文·卡瓦略(Melvin Carvalho) | akajes | Dima Sabanin ? | Koutaro Chikuba ? | HubertSablonnière |
大卫·杜阿尔特(David Duarte) | 托马斯·皮特斯基(Thomas Pytleski) ? | Vadim Markovtsev ? | Yu Shimura ? | 丹·林奇(Dan Lynch) | 杰弗里·韦斯科特(Jeffrey Wescott) ? | Zebzhao |
泰勒·史密斯 ? | Bram Borggreve ? | Stefan Guggisberg ? | 卡塔林·皮尔沃(Catalin Pirvu) | 尼古拉斯·尼尔森 | 安娜·亨宁森 | 法比安·亨尼克(Fabian Henneke) ? |
djencks ? | 克莱门斯·沃尔夫(Clemens Wolff) | 索金公园 | 爱德华·福克纳(Edward Faulkner) | khải ? | Corbin Crutchley | 莱克·李 |
Lin Onetwo | 林法鑫 ? | 威尔·斯托特 | 塞思·尼克尔 ? | Alex Titarenko | Misha Kaletsky | 理查德·祖尔奇(Richard C. Zulch) |
Mkizka | 瑞塔克 ? | 诺亚·汉梅尔(Noah Hummel) | 迈克·刘易斯 | Sam Verschueren | Vitor Luiz Cavalcanti | Shane McLaughlin |
肖恩·普尔特(Sean Poulter) ? | araknast | 拉斐尔·拉布(Rafael Raab) | 卢卡什·塞兹纳(LukášCezner) | 死胡同 | 巴里 | Alireza Mirian |
Danilkazanov | Eyal Hisco ? | 塞巴斯蒂安 | Yaroslav Halchenko | 亚历克斯·比利亚雷亚尔 | 本·莫罗(Ben Morrow) | Jayree |
卢卡斯·马丁·塞古拉多(Lucas Martin Segurado) ? | Leon Kaucher | 吉利·肖哈特(Gili Shohat) | 哈比卜 | Vinzent |
该项目遵循全企业规范。欢迎任何形式的贡献!
感谢我们所有的支持者! [成为支持者]
通过成为赞助商来支持这个项目。您的徽标将在此处显示您网站的链接。 [成为赞助商]
这项工作是根据MIT许可发布的