isomorphic-git ist eine reine JavaScript-Neuauflagen von Git, die sowohl in Node.js- als auch in Browser-JavaScript-Umgebungen funktioniert. Es kann Git -Repositories lesen und schreiben, von Git -Fernbedienungen (wie Github) abholen und auf die Abhängigkeiten native C ++ - Modul -Abhängigkeiten eingehen.
Isomorphes GIT zielt auf 100% Interoperabilität mit der kanonischen GIT-Implementierung ab. Dies bedeutet, dass es alle Vorgänge ausführt, indem Dateien in einem ".git" -Verzeichnis geändert werden, genau wie das Git, an das Sie gewöhnt sind. Die mitgelieferte isogit -CLI kann mit Git -Repositories auf Ihrem Desktop oder Server betrieben werden.
Diese Bibliothek zielt darauf ab, eine vollständige Lösung zu sein, in der keine Baugruppe erforderlich ist. Die API wurde mit modernen Tools wie Rollup und Webpack entwickelt. Durch die Bereitstellung von Funktionen als individuelle Funktionen können Code -Bundler kleinere Bündel produzieren, indem nur die Funktionen, die Ihre Anwendung verwendet, einbeziehen.
Das Projekt enthält Typdefinitionen, damit Sie statische Typ-Überprüfungen und intelligente Code-Fertigstellung bei Editoren wie VS Code und CodesAndbox genießen können.
Der ursprüngliche Autor des Projekts (Billie Hilton) hat das Projekt verlassen, das Projekt wird jedoch immer noch von zwei Freiwilligen unterhalten:
Aber sie schreiben nicht viel Code, führen hauptsächlich die Code -Überprüfung durch und versuchen, auf Probleme zu antworten. Auf dem Gitter möchten sie nicht, dass das Projekt stirbt. Sie können also sagen, dass dieses Projekt Community angetrieben ist (da JCUBIC immer auf Probleme antwortet). Das heißt, wenn Sie möchten, dass eine Funktion implementiert wird, müssen Sie dies selbst tun oder jemanden finden, der bereit ist, den Code für Sie zu schreiben. Das Projekt hat etwas Geld für openCollective und wir können es für eine Entwicklung ausgeben. Wenn Sie Somoene finden, das bereit ist, im Austausch einiger Dollars zu codieren (es ist vielleicht Sie), aber wir haben nicht viel, erwarten Sie nicht, dass Sie die volle Sally haben.
Wenn Sie diesem Projekt helfen möchten, sind Sie dazu mehr als willkommen.
Die folgenden Umgebungen werden in CI getestet und werden bis zur nächsten Breaking -Version weiterhin unterstützt:
Knoten 10 | Chrom 79 | Rand 79 | Firefox 72 | Safari 13 | Android 10 | iOS 13 |
Siehe die vollständigen Versionshinweise zu Github und den Release -Blog -Beitrag.
Sie können es von NPM installieren:
npm install --save isomorphic-git
Das "isomorphe" im isomorphic-git bedeutet, dass derselbe Code entweder im Server oder im Browser ausgeführt wird. Das ist schwierig, da Git das Dateisystem verwendet und HTTP -Anforderungen stellt. Browser haben kein fs -Modul. Und Knoten und Browser haben unterschiedliche APIs für HTTP -Anfragen!
Anstatt sich auf die fs und http -Module zu verlassen, können Sie isomorphic-git Ihr eigenes Dateisystem und HTTP-Client mitbringen.
Wenn Sie isomorphic-git im Knoten verwenden, verwenden Sie das native fs Modul und den bereitgestellten Knoten HTTP-Client.
// 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 ) Wenn Sie im Browser isomorphic-git verwenden, benötigen Sie etwas, das die fs -API emuliert. Am einfachsten zu richten und leistungsfähigsten Bibliothek sind LightningFs, das vom selben Autor geschrieben und gepflegt wird und Teil der isomorphic-git Suite ist. Wenn LightningFs Ihren Anforderungen nicht entspricht, sollte isomorphe Git auch mit Browserfs und Filer zusammenarbeiten. Anstelle von isomorphic-git/http/node importieren Sie diesmal 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 >Wenn Sie die ES-Modulsyntax verwenden, können Sie entweder den Standardimport für die Bequemlichkeit verwenden, oder benannte Importe, um von Baumschütteln zu profitieren, wenn Sie einen Bundler verwenden:
import git from 'isomorphic-git'
// or
import * as git from 'isomorphic-git'
// or
import { plugins , clone , commit , push } from 'isomorphic-git'Sehen Sie sich den vollständigen Handbuch für Erste Schritte auf der DOCS -Website an.
Schauen Sie sich dann die Nützliche Snippets -Seite an, die noch mehr Beispielcode enthält, die von der Community geschrieben wurden!
Leider kann der isomorphic-git standardmäßig die gleiche Ursprungspolitik nur aus demselben Ursprung wie auf der Webseite klonen, auf der es ausgeführt wird. Dies ist furchtbar unpraktisch, da dies für alle praktischen Zwecke bedeutet, dass sie über einen Stellvertreter klonen und schieben.
Zu diesem Zweck gibt es @isomorphe GIT/CORS-Proxy, die Sie klonen oder npm install können. Für Tests oder kleine Projekte können Sie auch https://cors.isomorphic-Git.org verwenden - einen kostenlosen Proxy, der von Clever Cloud gesponsert wird.
Ich hoffe, dass CORS -Header irgendwann zu allen wichtigen Git -Hosting -Plattformen hinzugefügt werden und meine Fortschritte hier auflisten werden:
| Service | Unterstützt CORS -Anfragen |
|---|---|
| Gogs (selbst gehostet) | ✔ |
| Gitea (selbst gehostet) | ✔ |
| Azure DevOps | ✔ (Verwendung Anmerkung: Benötigt Authentifizierung) |
| Gitlab | Mein PR wurde abgelehnt, aber das Problem ist immer noch offen! |
| Bitbucket | |
| Github |
Es sind buchstäblich nur zwei Codezeilen, um die CORS -Header hinzuzufügen !! Einfaches Zeug. Sicher wird es passieren.
isogit Cli Isomorphes Git wird mit einem einfachen CLI-Tool mit dem Namen isogit ausgestattet, da isomorphic-git eine Menge zu tippen ist. Es ist wirklich nur eine dünne Schale, die die Befehlszeilenargumente in den äquivalenten JS -API -Befehlen übersetzt. Sie sollten also in der Lage sein, aktuelle oder zukünftige isomorphe Git-Befehle mit der CLI auszuführen.
Es beginnt immer mit der Annahme, dass das aktuelle Arbeitsverzeichnis eine Git -Wurzel ist. ZB { dir: '.' } .
Es verwendet minimisted , um die Befehlszeilenoptionen zu analysieren und den gleichwertigen JS-Befehl auszudrucken und den Ausgang JSON.
Die CLI ist eher eine Lerche, um schnell isomorphic-git zu testen und ist nicht wirklich als git -CLI-Ersatz gemeint.
Dieses Projekt folgt der semantischen Versionierung, daher kann ich weiterhin Änderungen an der API vornehmen, aber sie sind immer rückwärtskompatibel, es sei denn, es gibt eine große Version.
Teilen Sie Ihre Fragen und Ideen mit! Wir lieben das. Sie können uns in unserem Gitter -Chatroom finden oder hier auf Github einfach ein Problem erstellen! Wir sind auch auf Twitter @isomorphicgit.
isomorphic-gitDas Entwicklungsaufbau ähnelt dem einer großen Webanwendung. Der Hauptunterschied ist die lächerliche Menge an Hacks, die an den Tests beteiligt sind. Wir verwenden Facebooks Scherz zum Testen, die TDD schnell und unterhaltsam machen, aber wir haben auch benutzerdefinierte Hacks verwendet, damit die gleichen Tests auch im Browser mit Jasmin über Karma durchgeführt werden. Wir haben sogar unseren eigenen Mock -Server zum Servieren von Git -Repository -Testvorstellungen!
Sie benötigen node.js installiert, aber alles andere ist eine DevDependenz.
git clone https://github.com/isomorphic-git/isomorphic-git
cd isomorphic-git
npm install
npm test Weitere Anweisungen finden Sie im CONTRIBUTING Dokument.
Isomorphes Git wäre ohne die Pionierarbeit von @creationix und @Crisdickinson nicht möglich gewesen. Git ist ein kniffliges binäres Durcheinander, und ohne ihre Beispiele (und ihre Module!) Wäre ich nicht in der Lage gewesen, dies zu beenden. Sie sind Genies vor ihrer Zeit.
Cross-Browser-Geräte-Tests erfolgen von:

Vielen Dank an diese wunderbaren Menschen (Emoji -Schlüssel):
William Hilton ? ? | wdhtig ? | Marc MacLeod ? ? | Brett Zamir ? | Dan Allen ? ? | Tomáš Haubelbauer ? | 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 Sablonnière |
David Duarte | Thomas Pytleski ? | Vadim Markovtsev ? | Yu Shimura ? | Dan Lynch | Jeffrey Wescott ? | Zebzhao |
Tyler Smith ? | Bram Borgreve ? | Stefan Guggisberg ? | Catalin Pirvu | Nicholas Nelson | Anna Henningsen | Fabian Henneke ? |
Dencks ? | Clemens Wolff | Sojin Park | 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 | Sackgasse | Barry | Alireza Mirian |
Danilkazanov | Eyal Hisco ? | Sebastien | Yaroslaw Halchenko | Alex Villarreal | Ben Morrow | Jayree |
Lucas Martin Segurado ? | Leon Kaucher | Gili Shohat | Habib | Vinzent |
Dieses Projekt folgt der All-Contributors-Spezifikation. Beiträge jeglicher Art willkommen!
Vielen Dank an alle unsere Unterstützer! [Backer werden]
Unterstützen Sie dieses Projekt, indem Sie Sponsor werden. Ihr Logo wird hier mit einem Link zu Ihrer Website angezeigt. [Sponsor werden]
Diese Arbeit wird unter der MIT -Lizenz veröffentlicht