isomorphic-git es una reimplementación pura de JavaScript de GIT que funciona en entornos de JavaScript de nodo.js y navegador. Puede leer y escribir en repositorios Git, obtener y empujar a los controles remotos de Git (como GitHub), todos sin ninguna dependencia nativa del módulo C ++.
El git isomórfico apunta a la interoperabilidad del 100% con la implementación de git canónico. Esto significa que realiza todas sus operaciones modificando los archivos en un directorio ".GIT" al igual que el GIT al que está acostumbrado. El isogit CLI incluido puede operar en repositorios GIT en su escritorio o servidor.
Esta biblioteca tiene como objetivo ser una solución completa sin requerido el ensamblaje. La API ha sido diseñada con herramientas modernas como Rollup y Webpack en mente. Al proporcionar funcionalidad como funciones individuales, los agrupadores de código pueden producir paquetes más pequeños al incluir solo las funciones que utiliza su aplicación.
El proyecto incluye definiciones de tipo para que pueda disfrutar de la verificación de tipo estática y la finalización del código inteligente en editores como VS Code y CodesandBox.
El autor original del proyecto (Billie Hilton) dejó el proyecto, pero el proyecto todavía es mantenido por dos voluntarios:
Pero no escriben mucho código, principalmente revisan el código e intentan responder a los problemas y en Gitter, simplemente no quieren que el proyecto muera. Entonces puede decir que este proyecto está impulsado por la comunidad (ya que JCubic siempre responde a los problemas). Lo que significa que si desea implementar una función, debe hacerlo usted mismo o encontrar a alguien que esté dispuesto a escribir el código por usted. El proyecto tiene algo de dinero en OpenColective y podemos gastarlo en algún desarrollo, si encuentra somoene que está dispuesto a codificar a cambio de algunos dólares (puede ser usted), pero no tenemos mucho, así que no espere tener un salario completo.
Si desea ayudar a este proyecto, es más que bienvenido a hacerlo.
Los siguientes entornos se prueban en CI y continuarán siendo compatibles hasta la próxima versión de ruptura:
Nodo 10 | Chrome 79 | Borde 79 | Firefox 72 | Safari 13 | Android 10 | iOS 13 |
Vea las notas de lanzamiento completas en GitHub y la publicación del blog de lanzamiento.
Puede instalarlo desde NPM:
npm install --save isomorphic-git
El "isomórfico" en isomorphic-git significa que el mismo código se ejecuta en el servidor o en el navegador. Eso es difícil de hacer ya que Git usa el sistema de archivos y realiza solicitudes HTTP. Los navegadores no tienen un módulo fs . ¡Y el nodo y los navegadores tienen diferentes API para realizar solicitudes HTTP!
Entonces, en lugar de confiar en los módulos fs y http , isomorphic-git le permite traer su propio sistema de archivos y cliente HTTP.
Si está utilizando isomorphic-git en el nodo, utiliza el módulo fs nativo y el cliente HTTP de nodo proporcionado.
// 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 está utilizando isomorphic-git en el navegador, necesitará algo que emule la API fs . La biblioteca más fácil de configurar y la mayoría de los actuantes son los rayos escritos y mantenidos por el mismo autor y es parte de la suite isomorphic-git . Si los rayos no cumplen con sus requisitos, Isomorphic-Git también debería funcionar con Browserfs y Filer. En lugar de isomorphic-git/http/node este tiempo, importe 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 está utilizando la sintaxis del módulo ES, puede usar la importación predeterminada para conveniencia o las importaciones nombradas para beneficiarse de la demanda de árboles si está utilizando un Bundler:
import git from 'isomorphic-git'
// or
import * as git from 'isomorphic-git'
// or
import { plugins , clone , commit , push } from 'isomorphic-git'Vea la guía completa de inicio en el sitio web de Docs.
¡Luego, consulte la página de fragmentos útiles, que incluye aún más código de muestra escrito por la comunidad!
Desafortunadamente, debido a la política del mismo origen, por defecto, isomorphic-git solo puede clonar del mismo origen que la página web en la que se ejecuta. Esto es terriblemente inconveniente, ya que significa para todos los efectos prácticos, la clonación y el empuje de repos se debe hacer a través de un poder.
Para este propósito, @isomorphic-git/cors-proxy existe que puede clonar o npm install . Para pruebas o pequeños proyectos, también puede usar https://cors.isomorphic-git.org, un proxy gratuito patrocinado por Clever Cloud.
Espero que los encabezados de Cors se agregue a todas las principales plataformas de alojamiento GIT eventualmente, y enumeraré mi progreso aquí:
| Servicio | Admite solicitudes CORS |
|---|---|
| Gogs (autohospedados) | ✔ |
| Gitea (autohospedado) | ✔ |
| Azure DevOps | ✔ (Nota de uso: requiere autenticación) |
| Gitlab | Mi RP fue rechazado, ¡pero el problema aún está abierto! |
| Bitbucket | |
| Github |
¡Son literalmente solo dos líneas de código para agregar los encabezados Cors! Cosas fáciles. Seguramente sucederá.
isogit CLI El git isomórfico viene con una herramienta CLI simple, llamada isogit porque isomorphic-git es mucho para escribir. Realmente es solo un caparazón delgado que traduce argumentos de línea de comandos en los comandos de API JS equivalentes. Por lo tanto, debería poder ejecutar comandos actuales o futuros de git isomórficos utilizando la CLI.
Siempre comienza con la suposición de que el directorio de trabajo actual es una raíz Git. Eg { dir: '.' } .
Utiliza las opciones de línea de comandos minimisted para analizar e imprimirá el comando JS equivalente e imprimirá bastante la salida JSON.
El CLI es más una alondra para probar rápidamente isomorphic-git y no se entiende realmente como un reemplazo git CLI.
Este proyecto sigue a los versiones semánticas, por lo que puedo continuar haciendo cambios en la API, pero siempre serán compatibles con el retroceso a menos que haya un aumento de la versión principal.
¡Comparte tus preguntas e ideas con nosotros! Nos encanta eso. ¡Puede encontrarnos en nuestra sala de chat de Gitter o simplemente crear un problema aquí en GitHub! También somos @isomorphicgit en Twitter.
isomorphic-gitLa configuración de desarrollo es similar a la de una gran aplicación web. La principal diferencia es la cantidad ridícula de hacks involucrados en las pruebas. Usamos la broma de Facebook para las pruebas, que hacen que hacer TDD sea rápido y divertido, pero también usamos hacks personalizados para que las mismas pruebas también se ejecuten en el navegador usando Jasmine a través de Karma. ¡Incluso tenemos nuestro propio servidor simulado para servir los accesorios de prueba de repositorio de Git!
Necesitará Node.js instalado, pero todo lo demás es una Devdependencia.
git clone https://github.com/isomorphic-git/isomorphic-git
cd isomorphic-git
npm install
npm test Consulte el documento CONTRIBUTING para obtener más instrucciones.
El git isomórfico no hubiera sido posible sin el trabajo pionero de @Creationix y @chrisdickinson. Git es un desastre binario complicado, y sin sus ejemplos (¡y sus módulos!) No hubiera podido acercarme a terminar esto. Son genios antes de su tiempo.
La prueba de dispositivo de navegador cruzado es proporcionada por:

Gracias a estas maravillosas personas (Key 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 sabanina ? | Koutaro Chikuba ? | Hubert Sablonnière |
David Duarte | Thomas Pytleski ? | Vadim Markovtsev ? | Yu Shimura ? | Dan Lynch | Jeffrey Wescott ? | zebzhao |
Tyler Smith ? | Bram Borggreve ? | Stefan Guggisberg ? | Catalin Pirvu | Nicholas Nelson | Anna Henningsen | Fabian Henneke ? |
djencks ? | Clemens Wolff | Parque de sojin | Edward Faulkner | Khải ? | Corbin Crutchley | Ricball 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 | de extremo muerto | Barry | Alireza Mirian |
Danilkazanov | Eyal Hisco ? | Sebastien | Yaroslav halchenko | Alex Villarreal | Ben Morrow | jayree |
Lucas Martin Segurado ? | Leon Kaucher | Gili Shohat | Habib | Vinzent |
Este proyecto sigue la especificación de todos los contribuyentes. ¡Contribuciones de cualquier tipo bienvenido!
¡Gracias a todos nuestros patrocinadores! [Conviértete en un patrocinador]
Apoye este proyecto al convertirse en patrocinador. Su logotipo aparecerá aquí con un enlace a su sitio web. [Convertirse en patrocinador]
Este trabajo se publica bajo la licencia MIT