isomorphic-git é uma reimplementação pura de JavaScript do GIT que funciona em ambientes Node.js e JavaScript do navegador. Ele pode ler e escrever para repositórios Git, buscar e pressionar para o Git Remotes (como o GitHub), tudo sem nenhuma dependência nativa do módulo C ++.
O Isomorphic-Git visa 100% de interoperabilidade com a implementação do GIT canônico. Isso significa que ele faz todas as suas operações modificando os arquivos em um diretório ".git", assim como o git que você está acostumado. O isogit CLI incluído pode operar em repositórios Git em sua área de trabalho ou servidor.
Esta biblioteca pretende ser uma solução completa, sem necessidade de montagem. A API foi projetada com ferramentas modernas como Rollup e Webpack em mente. Ao fornecer funcionalidade como funções individuais, os pacotes de código podem produzir pacotes menores, incluindo apenas as funções que seu aplicativo usa.
O projeto inclui definições de tipo para que você possa desfrutar de verificação de tipo estático e conclusão inteligente de código em editores como vs código e código e caixa de código.
O autor original do projeto (Billie Hilton) deixou o projeto, mas o projeto ainda é mantido por dois voluntários:
Mas eles não escrevem muito código, principalmente fazem a revisão de código e tentam responder a problemas e no Gitter, eles simplesmente não querem que o projeto morra. Então você pode dizer que este projeto é orientado pela comunidade (pois o JCUBIC sempre responde aos problemas). O que significa que, se você deseja que um recurso seja implementado, precisa fazer isso sozinho ou encontrar alguém que esteja disposto a escrever o código para você. O projeto tem algum dinheiro no OpenCollective e podemos gastá -lo em algum desenvolvimento, se você encontrar Somoene que esteja disposto a codificar em troca de alguns dólares (pode ser você), mas não temos muito, então não espere ter salário completo.
Se você quiser ajudar este projeto, é mais do que bem -vindo.
Os seguintes ambientes são testados no CI e continuarão sendo suportados até a próxima versão de quebra:
Nó 10 | Chrome 79 | Edge 79 | Firefox 72 | Safari 13 | Android 10 | iOS 13 |
Veja as notas de lançamento completas no Github e a postagem do blog de lançamento.
Você pode instalá -lo no NPM:
npm install --save isomorphic-git
O "isomórfico" no isomorphic-git significa que o mesmo código é executado no servidor ou no navegador. Isso é complicado de fazer, já que o Git usa o sistema de arquivos e faz solicitações HTTP. Os navegadores não têm um módulo fs . E o nó e os navegadores têm APIs diferentes para fazer solicitações HTTP!
Portanto, em vez de confiar nos módulos fs e http , isomorphic-git permite trazer seu próprio sistema de arquivos e cliente HTTP.
Se você estiver usando isomorphic-git no nó, usa o módulo fs nativo e o cliente HTTP do nó fornecido.
// 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 ) Se você estiver usando isomorphic-git no navegador, precisará de algo que emula a API fs . A biblioteca mais fácil de configurar e a maioria dos desempenhos é o Lightningfs, que é escrito e mantido pelo mesmo autor e faz parte da suíte isomorphic-git . Se o Lightningfs não atender aos seus requisitos, o isomórfico-Git também deve funcionar com o BrowSerfs e o Filer. Em vez de isomorphic-git/http/node desta vez importar 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 >Se você estiver usando a sintaxe do módulo ES, poderá usar a importação padrão para conveniência ou as importações nomeadas para se beneficiar de agitação de árvores se estiver usando um empacota:
import git from 'isomorphic-git'
// or
import * as git from 'isomorphic-git'
// or
import { plugins , clone , commit , push } from 'isomorphic-git'Veja o guia completo para começar no site do Docs.
Em seguida, confira a página de snippets úteis, que inclui ainda mais código de amostra escrito pela comunidade!
Infelizmente, devido à política da mesma origem por padrão, isomorphic-git só pode clonar da mesma origem que a página da web em que está sendo executada. Isso é terrivelmente inconveniente, pois significa para todos os propósitos práticos que a clonagem e os repositórios de empurrar deve ser feita através de um proxy.
Para esse fim, existe existe a proxy isomorphic-git/cors-proxy, que você pode clonar ou npm install . Para testes ou pequenos projetos, você também pode usar https://cors.isomorphic-git.org - um proxy gratuito patrocinado pela Clever Cloud.
Espero acrescentar os cabeçalhos da CORS a todas as principais plataformas de hospedagem Git e listarei meu progresso aqui:
| Serviço | Suporta solicitações de CORS |
|---|---|
| Gogs (auto-hospedado) | ✔ |
| Gitea (auto-hospedado) | ✔ |
| Azure DevOps | ✔ (Nota de uso: requer autenticação) |
| Gitlab | Meu PR foi rejeitado, mas o problema ainda está aberto! |
| Bitbucket | |
| Github |
É literalmente apenas duas linhas de código para adicionar os cabeçalhos CORS !! Coisas fáceis. Certamente isso vai acontecer.
isogit CLI O ISomorphic-Git vem com uma ferramenta CLI simples, chamada isogit porque isomorphic-git é muito para digitar. É realmente apenas um shell fino que traduz os argumentos da linha de comando nos comandos equivalentes da API JS. Portanto, você poderá executar quaisquer comandos isomorficos-GIT atuais ou futuros usando a CLI.
Sempre começa com a suposição de que o diretório de trabalho atual é uma raiz git. Por exemplo, { dir: '.' } .
Ele usa as opções minimisted para analisar a linha de comando e imprimirá o comando JS equivalente e belo impressão do json de saída.
A CLI é mais uma brincadeira para testar rapidamente isomorphic-git e não é realmente destinado a uma substituição do CLI git .
Este projeto segue a versão semântica, para que eu continue fazendo alterações na API, mas elas sempre serão compatíveis com versões anteriores, a menos que haja uma versão importante da versão.
Compartilhe suas perguntas e idéias conosco! Nós amamos isso. Você pode nos encontrar em nossa sala de chat gitter ou apenas criar um problema aqui no Github! Também somos @isomorphicgit no Twitter.
isomorphic-gitA configuração de desenvolvimento é semelhante à de um grande aplicativo da Web. A principal diferença é a quantidade ridícula de hacks envolvidos nos testes. Utilizamos a brincadeira do Facebook para testes, que tornam o TDD rápido e divertido, mas também usamos hacks personalizados para que os mesmos testes também sejam executados no navegador usando o Jasmine via Karma. Temos até nosso próprio servidor simulado para servir os acessórios de teste do Repositório Git!
Você precisará de Node.js instalado, mas todo o resto é uma dependência.
git clone https://github.com/isomorphic-git/isomorphic-git
cd isomorphic-git
npm install
npm test Confira o documento CONTRIBUTING para obter mais instruções.
Isomorphic-Git não teria sido possível sem o trabalho pioneiro de @creationix e @chrisdickinson. Git é uma bagunça binária complicada e, sem os exemplos (e seus módulos!), Eu não teria chegado nem perto de terminar isso. Eles são gênios antes de seu tempo.
Os testes de dispositivo de navegador cruzado são fornecidos por:

Obrigado a essas pessoas maravilhosas (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 Sabanin ? | 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 | 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 | sem saída | Barry | Alireza Mirian |
Danilkazanov | Eyal Hisco ? | Sebastien | Yaroslav Halchenko | Alex Villarreal | Ben Morrow | Jayree |
Lucas Martin Segurado ? | Leon Kaucher | Gili Shohat | Habib | Vinzent |
Este projeto segue a especificação de todos os contribuintes. Contribuições de qualquer tipo de boas -vindas!
Obrigado a todos os nossos apoiadores! [Torne -se um patrocinador]
Apoie este projeto, tornando -se um patrocinador. Seu logotipo aparecerá aqui com um link para o seu site. [Torne -se um patrocinador]
Este trabalho é divulgado sob a licença do MIT