isomorphic-git -это чистое повторное воспроизведение JavaScript GIT, которое работает как в средах node.js, так и в средах браузера JavaScript. Он может читать и писать в репозитории GIT, извлекать из себя и подталкивать к GIT Remote (например, GitHub), все без каких -либо нативных зависимостей C ++ -модулей.
Isomorphic-Git стремится к 100% взаимодействии с канонической реализацией GIT. Это означает, что он выполняет все свои операции, изменяя файлы в каталоге «.git», как и GIT, к которому вы привыкли. Включенный isogit CLI может работать на репозиториях GIT на вашем рабочем столе или сервере.
Эта библиотека направлена на полное решение без необходимости сборки. API был разработан с учетом современных инструментов, таких как Rollup и Webpack. Предоставляя функциональность в качестве отдельных функций, кодовые пучки могут создавать меньшие пакеты, включив только функции, которые использует ваше приложение.
Проект включает в себя определения типов, чтобы вы могли наслаждаться статической проверкой типов и интеллектуальным завершением кода в редакторах, таких как VS Code и CodeSandbox.
Первоначальный автор проекта (Билли Хилтон) покинул проект, но проект все еще поддерживается двумя добровольцами:
Но они не пишут много кода, в основном проводят проверку кода и пытаются ответить на проблемы и на друттере, они просто не хотят, чтобы проект умер. Таким образом, вы можете сказать, что этот проект ориентирован на сообщество (поскольку Jcubic всегда отвечает на вопросы). Это означает, что если вы хотите реализовать функцию, вам нужно сделать это самостоятельно или найти кого -то, кто готов написать код для вас. В проекте есть немного денег на Opencollective, и мы можем потратить их на какую -то разработку, если вы обнаружите, что Somoene, который готов кодировать в обмен на некоторые доллары (это может быть вы), но у нас мало что есть, поэтому не ожидайте, что у вас будет полная бессмысленная.
Если вы хотите помочь этому проекту, вы можете сделать это.
Следующие среды проверены в CI и будут поддерживать до следующей разрывной версии:
Узел 10 | Хром 79 | Край 79 | Firefox 72 | Сафари 13 | Android 10 | iOS 13 |
См. Полные заметки о выпуске на Github и в блоге релизов.
Вы можете установить его из NPM:
npm install --save isomorphic-git
«Изоморфный» в isomorphic-git означает, что тот же код работает либо на сервере, либо на браузере. Это сложно сделать, так как GIT использует файловую систему и выполняет HTTP -запросы. У браузеров нет модуля fs . А узел и браузеры имеют разные API для выполнения HTTP -запросов!
Поэтому вместо того, чтобы полагаться на модули fs и http , isomorphic-git позволяет приносить свою собственную файловую систему и HTTP-клиент.
Если вы используете isomorphic-git в узле, вы используете собственный модуль fs и предоставленный Node 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'Посмотреть полное руководство по началу работы на веб -сайте DOCS.
Затем посмотрите на страницу полезных фрагментов, которая включает в себя еще больше примеров кода, написанного сообществом!
К сожалению, из-за той же политики по умолчанию isomorphic-git может клонировать только из того же происхождения, что и веб-страница, на которой он работает. Это ужасно неудобно, так как это означает, что для всех практических целей клонирование, и толкание репо, должно выполняться через прокси.
Для этого существует @isomorphic-git/cors-proxy, который вы можете клонировать или npm install . Для тестирования или небольших проектов вы также можете использовать https://cors.isomorphic-git.org - бесплатный прокси, спонсируемый Clever Cloud.
Я надеюсь в конечном итоге добавить заголовки CORS ко всем основным платформам хостинга GIT, и перечисляю здесь мой прогресс:
| Услуга | Поддерживает запросы CORS |
|---|---|
| Gogs (самостоятельно) | ✔ |
| Гитея (самостоятельно) | ✔ |
| Лазурные DevOps | ✔ (Использование Примечание: требует аутентификации) |
| Гитлаб | Мой пиар был отвергнут, но проблема все еще открыта! |
| Битбакет | |
| GitHub |
Это буквально только две строки кода, чтобы добавить заголовки CORS !! Легко. Конечно, это произойдет.
isogit cli Isomorphic-GIT поставляется с простым инструментом CLI, названным isogit , потому что isomorphic-git много для типа. На самом деле это просто тонкая оболочка, которая переводит аргументы командной строки в эквивалентные команды JS API. Таким образом, вы должны быть в состоянии запустить любые текущие или будущие изоморфные-GIT команды, используя CLI.
Это всегда начинается с предположения, что текущий рабочий каталог является корнем GIT. Например, { dir: '.' } .
Он использует minimisted для параметров командной строки Parse, и будет распечатать эквивалентную команду JS и красиво напечатать вывод JSON.
CLI-это скорее жаворонок для быстрого тестирования isomorphic-git и на самом деле не предназначен как замена git CLI.
Этот проект следует за семантическим управлением версиями, поэтому я могу продолжать вносить изменения в API, но они всегда будут обратно совместимы, если не существует крупной версии.
Поделитесь своими вопросами и идеями с нами! Мы любим это. Вы можете найти нас в нашем чате Gitter или просто создать проблему здесь, на GitHub! Мы также @isomorphicgit в Твиттере.
isomorphic-gitНастройка разработки аналогична установке большого веб -приложения. Основное отличие - смешное количество взломов, связанных с тестами. Мы используем шутку Facebook для тестирования, которые делают TDD быстро и веселыми, но мы также использовали пользовательские взломы, чтобы те же тесты также были выполнены в браузере, используя Jasmine через карму. У нас даже есть собственный фиктивный сервер для обслуживания тестовых приборов GIT!
Вам понадобится установлен Node.js, но все остальное - это DevDependency.
git clone https://github.com/isomorphic-git/isomorphic-git
cd isomorphic-git
npm install
npm test Проверьте CONTRIBUTING документ для получения дополнительных инструкций.
Isomorphic-Git не был бы возможен без новаторской работы @creationix и @chrisdickinson. GIT - сложный бинарный беспорядок, и без их примеров (и их модулей!) Я бы не смог приблизиться даже к тому, чтобы закончить это. Они гения впереди своего времени.
Тестирование кросс-браузера обеспечивается:

Спасибо этим замечательным людям (ключ эмодзи):
Уильям Хилтон ? ? | wdhtig ? | Марк Маклеод ? ? | Бретт Замир ? | Дэн Аллен ? ? | Томаш Хюбельбауэр ? | Хуан Кампа ? |
Ира Миллер ? | Рис Аркинс | Шон Ларкин | Даниэль Руф | Бокувеб | Хироки Осам | Якуб Янквич ? |
Ховардгод ? | Burningtyger ? | Мелвин Карвалью | Акаджес | Дима Сабанин ? | Koutaro Chikuba ? | Хьюберт Саблоннера |
Дэвид Дуарте | Томас Пайтлески ? | Вадим Марковтцев ? | Ю Шимура ? | Дэн Линч | Джеффри Уэскотт ? | Зебжао |
Тайлер Смит ? | Брэм Борггрив ? | Стефан Гуггисберг ? | Каталин Пирву | Николас Нельсон | Анна Хеннингсен | Фабиан Хеннеке ? |
ДЖЕНКС ? | Клеменс Вольф | Соджин Парк | Эдвард Фолкнер | Хит ? | Корбин Крутчли | Райсбол Ли |
Лин Онэтву | 林法鑫 ? | Уилл Стотт | Сет Никелл ? | Алекс Титаренко | Миша Калецкий | Ричард С. Зулч |
Мкицка | Риотак ? | Ноа Хаммел | Майк Льюис | Сэм Вершерен | Витор Луис Кавальканти | Шейн Маклафлин |
Шон Полтер ? | аракнаст | Рафаэль Рааб | Лукаш Сезнер | тупик | Барри | Алиреза Мириан |
Данилказанов | Эяль Хиско ? | Себастьен | Ярослав Халченко | Алекс Вильярреал | Бен Морроу | Джейри |
Лукас Мартин Сегурадо ? | Леон Каучер | Гили Шохат | Хабиб | Винзент |
Этот проект следует за спецификацией всех контролей. Взносы любого вида приветствуются!
Спасибо всем нашим покровителям! [Станьте покровителем]
Поддержите этот проект, став спонсором. Ваш логотип будет отображаться здесь со ссылкой на ваш сайт. [Станьте спонсором]
Эта работа выпущена по лицензии MIT