isomorphic-git est une réimplémentation JavaScript pure de Git qui fonctionne dans les environnements JavaScript Node.js et Browser. Il peut lire et écrire dans les référentiels GIT, récupérer et pousser les télécommandes GIT (tels que github), le tout sans dépendances de modules C ++ natifs.
Isomorphic-Git vise 100% d'interopérabilité avec la mise en œuvre canonique du GIT. Cela signifie qu'il fait toutes ses opérations en modifiant les fichiers dans un répertoire ".git" tout comme le git auquel vous êtes habitué. L' isogit CLI inclus peut fonctionner sur des référentiels GIT sur votre bureau ou votre serveur.
Cette bibliothèque vise à être une solution complète sans assemblage requis. L'API a été conçue avec des outils modernes comme Rollup et WebPack à l'esprit. En fournissant des fonctionnalités en tant que fonctions individuelles, les groupes de code peuvent produire des faisceaux plus petits en incluant uniquement les fonctions que votre application utilise.
Le projet comprend des définitions de type afin que vous puissiez profiter de la vérification de type statique et de l'achèvement du code intelligent dans les éditeurs comme le code vs et le code et la boîte.
L'auteur original du projet (Billie Hilton) a quitté le projet, mais le projet est toujours maintenu par deux bénévoles:
Mais ils n'écrivent pas beaucoup de code, font principalement une revue de code et essaient de répondre aux problèmes et sur Gitter, ils ne veulent tout simplement pas que le projet meure. Vous pouvez donc dire que ce projet est axé sur la communauté (car JcuBic répond toujours aux problèmes). Ce qui signifie que si vous voulez qu'une fonctionnalité soit implémentée, vous devez le faire vous-même ou trouver quelqu'un qui est prêt à écrire le code pour vous. Le projet a de l'argent sur OpenCollective et nous pouvons le dépenser pour un certain développement, si vous trouvez le Somoene qui est prêt à coder en échange de certains dollars (c'est peut-être vous), mais nous n'en avons pas grand-chose, alors ne nous attendons pas à avoir une Sallary complète.
Si vous souhaitez aider ce projet, vous êtes plus que bienvenu.
Les environnements suivants sont testés dans CI et continueront d'être pris en charge jusqu'à la prochaine version de rupture:
Node 10 | Chrome 79 | Edge 79 | Firefox 72 | Safari 13 | Android 10 | iOS 13 |
Voir les notes de version complète sur GitHub et le blog de la version.
Vous pouvez l'installer à partir de NPM:
npm install --save isomorphic-git
Le "isomorphe" dans isomorphic-git signifie que le même code s'exécute dans le serveur ou le navigateur. C'est difficile à faire depuis que GIT utilise le système de fichiers et fait des demandes HTTP. Les navigateurs n'ont pas de module fs . Et le nœud et les navigateurs ont différentes API pour faire des demandes HTTP!
Ainsi, plutôt que de compter sur les modules fs et http , isomorphic-git vous permet d'apporter votre propre système de fichiers et client HTTP.
Si vous utilisez isomorphic-git dans le nœud, vous utilisez le module fs natif et le client HTTP de nœud fourni.
// 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 ) Si vous utilisez isomorphic-git dans le navigateur, vous aurez besoin de quelque chose qui émule l'API fs . La bibliothèque la plus facile à configurer et la plus performante est LightningFS qui est écrite et maintenue par le même auteur et fait partie de la suite isomorphic-git . Si LightningFS ne répond pas à vos exigences, l'isomorphe-Git devrait également fonctionner avec Browserfs et Filer. Au lieu de isomorphic-git/http/node cette fois, importez 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 >Si vous utilisez la syntaxe des modules ES, vous pouvez utiliser l'importation par défaut pour la commodité, soit les importations nommées pour bénéficier de la partage d'arbres si vous utilisez un bundler:
import git from 'isomorphic-git'
// or
import * as git from 'isomorphic-git'
// or
import { plugins , clone , commit , push } from 'isomorphic-git'Consultez le guide complet de démarrage sur le site Web des documents.
Consultez ensuite la page des extraits utiles, qui comprend encore plus de code écrit par la communauté!
Malheureusement, en raison de la stratégie d'origine même par défaut, isomorphic-git ne peut se cloner que de la même origine que la page Web sur laquelle il fonctionne. Ceci est terriblement gênant, car cela signifie à toutes fins pratiques, le clonage et la poussée des reposs doivent être effectués par un proxy.
À cette fin, @ Isomorphic-git / CORS-Proxy existe que vous pouvez clone ou npm install . Pour les tests ou les petits projets, vous pouvez également utiliser https://cors.isomorphic-git.org - un proxy gratuit parrainé par Clever Cloud.
J'espère que les en-têtes CORS ont finalement ajouté à toutes les principales plates-formes d'hébergement Git et énuméreront mes progrès ici:
| Service | Prend en charge les demandes CORS |
|---|---|
| Gogs (auto-hébergé) | ✔ |
| Gitea (auto-hébergé) | ✔ |
| Azure DevOps | ✔ (Remarque d'utilisation: nécessite l'authentification) |
| Gitlab | Mon RP a été rejeté, mais le problème est toujours ouvert! |
| Bitbucket | |
| Github |
Ce n'est littéralement que deux lignes de code pour ajouter les en-têtes CORS !! Des trucs faciles. Cela se produira sûrement.
isogit CLI Isomorphic-Git est livré avec un simple outil CLI, nommé isogit parce que isomorphic-git est beaucoup à taper. C'est vraiment juste une coquille mince qui traduit les arguments de ligne de commande dans les commandes API JS équivalentes. Vous devriez donc être en mesure d'exécuter toutes les commandes actuelles ou futures de git isomorphe en utilisant la CLI.
Il commence toujours par l'hypothèse que le répertoire de travail actuel est une racine git. Par exemple { dir: '.' } .
Il utilise les options de ligne de commande minimisted pour analyser et imprimera la commande JS équivalente et imprimera la sortie JSON.
La CLI est plus une alouette pour tester rapidement isomorphic-git et n'est pas vraiment censé être un remplacement git CLI.
Ce projet suit les versioning sémantique, donc je peux continuer à apporter des modifications à l'API, mais elles seront toujours en arrière compatibles à moins qu'il n'y ait une bosse de version majeure.
Partagez vos questions et idées avec nous! Nous aimons ça. Vous pouvez nous trouver dans notre gittor ou créer un problème ici sur GitHub! Nous sommes également @isomorphicgit sur Twitter.
isomorphic-gitLa configuration de développement est similaire à celle d'une grande application Web. La principale différence est la quantité ridicule de hacks impliqués dans les tests. Nous utilisons la plaisanterie de Facebook pour les tests, ce qui rend la TDD rapide et amusante, mais nous avons également utilisé des hacks personnalisés afin que les mêmes tests se déroulent également dans le navigateur à l'aide de Jasmine via Karma. Nous avons même notre propre serveur simulé pour servir les appareils de test du référentiel GIT!
Vous aurez besoin de Node.js installé, mais tout le reste est une DevDependance.
git clone https://github.com/isomorphic-git/isomorphic-git
cd isomorphic-git
npm install
npm test Consultez le document CONTRIBUTING pour plus d'instructions.
L'isomorphe-git n'aurait pas été possible sans le travail pionnier de @creationix et @chrisdickinson. Git est un gâchis binaire délicat, et sans leurs exemples (et leurs modules!), Je n'aurais pas pu me rapprocher de cela. Ce sont des génies en avance sur leur temps.
Les tests de périphériques croisés sont fournis par:

Merci à ces gens merveilleux (clé emoji):
William Hilton ? ? | wdhtig ? | Marc MacLeod ? ? | Brett Zamir ? | Dan Allen ? ? | Tomáš Hübelbauer ? | Juan Campa ? |
Ira Miller ? | Rhys Arkins | Sean Larkin | Daniel Ruf | bokuweb | Hiroki Osame | Jakub jankiewicz ? |
howardgod ? | burningtyger ? | Melvin Carvalho | akajes | Dima Sabanin ? | Koutaro chikuba ? | Hubert Sablonière |
David Duarte | Thomas Pytleski ? | Vadim Markovtsev ? | Yu Shimura ? | Dan Lynch | Jeffrey Wescott ? | zebzhao |
Tyler Smith ? | Bram ? | Stefan Guggisberg ? | Catalin Pirvu | Nicholas Nelson | Anna Henningsen | Fabian Henneke ? |
djencks ? | Clemens Wolff | Parc de sojin | Edward Faulkner | Khải ? | Corbin Crutchley | Riceball Lee |
Lin Onetwo | 林法鑫 ? | Will Stott | Seth Nickell ? | Alex Titarenko | Misha Kaletsky | Richard C. Zulch |
mkizka | Ryotak ? | Noah Hummel | Mike Lewis | Sam Verschueren | Vitor Luiz Cavalcanti | Shane McLaughlin |
Sean Poulter ? | araknast | Rafael Raab | Lukáš Cezner | impasse | Barry | Alireza Mirian |
Danilkazanov | Eyal Hisco ? | Sébastien | Yaroslav Halchenko | Alex Villarreal | Ben Morrow | Jayree |
Lucas Martin Segurado ? | Leon Kaucher | Gili Shohat | Habile | Vinzent |
Ce projet suit les spécifications de tous les contributeurs. Contributions de toute nature bienvenue!
Merci à tous nos bailleurs de fonds! [Devenez un bailleur de fonds]
Soutenez ce projet en devenant un sponsor. Votre logo apparaîtra ici avec un lien vers votre site Web. [Devenir sponsor]
Ce travail est publié sous la licence du MIT