isomorphic-git node.js 및 브라우저 JavaScript 환경에서 작동하는 GIT의 순수한 JavaScript 재 구현입니다. 기본 C ++ 모듈 종속성이없는 GIT 리포지토리를 읽고 쓸 수 있고 Github와 같은 GIT 리모컨 (GitHub)을 가져올 수 있습니다.
이소성-기소는 표준 GIT 구현과 100% 상호 운용성을 목표로한다. 이것은 당신이 익숙한 git과 마찬가지로 ".git"디렉토리에서 파일을 수정하여 모든 작업을 수행한다는 것을 의미합니다. 포함 된 isogit CLI는 데스크탑 또는 서버의 GIT 리포지토리에서 작동 할 수 있습니다.
이 라이브러리는 어셈블리가 필요없는 완전한 솔루션이되는 것을 목표로합니다. API는 롤업 및 웹 팩과 같은 최신 도구를 염두에두고 설계되었습니다. Code Bundlers는 개별 기능으로 기능을 제공함으로써 응용 프로그램이 사용하는 기능 만 포함하여 작은 번들을 생성 할 수 있습니다.
이 프로젝트에는 유형 정의가 포함되어 있으므로 VS Code 및 Codesandbox와 같은 편집자에서 정적 유형 검사 및 지능형 코드 완료를 즐길 수 있습니다.
The Project (Billie Hilton)의 최초 저자는 프로젝트를 떠났지만 프로젝트는 여전히 두 명의 자원 봉사자에 의해 유지됩니다.
그러나 그들은 많은 코드를 쓰지 않고, 주로 코드 검토를하고, 문제와 gitter에 대한 답변을 시도하면 프로젝트가 죽기를 원하지 않습니다. 따라서이 프로젝트는 커뮤니티 중심이라고 말할 수 있습니다 (JCubic은 항상 문제에 답장하기 때문에). 즉, 기능을 구현하려면 직접 수행하거나 코드를 작성하려는 사람을 찾아야합니다. 이 프로젝트는 OpenCollective에 약간의 돈을 가지고 있으며 우리는 약간의 개발에 소비 할 수 있습니다. 만약 당신이 약간의 돈과 대가로 코딩 할 의사가있는 소모엔을 찾으면 (당신일지도 모르지만, 우리는별로 설득력이 없으므로 전체적으로 설득 할 것으로 기대하지는 않습니다.
이 프로젝트를 도와주고 싶다면 환영합니다.
다음 환경은 CI에서 테스트되며 다음 브레이킹 버전까지 계속 지원됩니다.
노드 10 | 크롬 79 | 가장자리 79 | Firefox 72 | 사파리 13 | 안드로이드 10 | iOS 13 |
GitHub 및 릴리스 블로그 게시물의 전체 릴리스 노트를 참조하십시오.
NPM에서 설치할 수 있습니다.
npm install --save isomorphic-git
isomorphic-git 의 "동형"은 동일한 코드가 서버 또는 브라우저에서 실행된다는 것을 의미합니다. GIT가 파일 시스템을 사용하여 HTTP 요청을하기 때문에 까다 롭습니다. 브라우저에는 fs 모듈이 없습니다. 노드와 브라우저에는 HTTP 요청을위한 API가 다릅니다!
따라서 fs 및 http 모듈에 의존하기보다는 isomorphic-git 사용하면 자체 파일 시스템과 HTTP 클라이언트를 가져올 수 있습니다.
노드에서 isomorphic-git 사용하는 경우 기본 fs 모듈과 제공된 노드 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 Module Syntax를 사용하는 경우 편의를 위해 기본 가져 오기를 사용하거나 가져 오기가 번들러를 사용하는 경우 트리 쉐이킹의 혜택을받을 수 있습니다.
import git from 'isomorphic-git'
// or
import * as git from 'isomorphic-git'
// or
import { plugins , clone , commit , push } from 'isomorphic-git'문서 웹 사이트에서 시작 가이드 전체를보십시오.
그런 다음 커뮤니티가 작성한 더 많은 샘플 코드가 포함 된 유용한 스 니펫 페이지를 확인하십시오!
불행히도, 기본적으로 동일한 원래 정책으로 인해 isomorphic-git 실행중인 웹 페이지와 동일한 원점에서만 복제 할 수 있습니다. 이것은 모든 실제 목적으로 복제하고 밀어 붙이는 저장소는 대리를 통해 이루어져야하기 때문에 매우 불편합니다.
이 목적을 위해 @isomorphic-git/cors-proxy가 존재하여 복제 또는 npm install 수 있습니다. 테스트 또는 소규모 프로젝트의 경우 Clever Cloud가 후원하는 무료 프록시 인 https://cors.isomorphic-git.org를 사용할 수도 있습니다.
나는 결국 모든 주요 GIT 호스팅 플랫폼에 CORS 헤더를 추가하기를 희망하며 여기에 내 진행 상황을 나열 할 것입니다.
| 서비스 | CORS 요청을 지원합니다 |
|---|---|
| Gogs (자조) | ✔ |
| Gitea (자조) | ✔ |
| Azure devops | ✔ (사용 주 : 인증 필요) |
| gitlab | 내 PR이 거부되었지만 문제는 여전히 열려 있습니다! |
| 비트 버킷 | |
| github |
Cors 헤더를 추가하는 것은 말 그대로 두 줄의 코드입니다! 쉬운 물건. 확실히 일어날 것입니다.
isogit Cli 이소성-git는 isomorphic-git 많은 타입이기 때문에 isogit 라는 간단한 CLI 도구와 함께 제공됩니다. 명령 줄 인수를 동등한 JS API 명령으로 변환하는 것은 실제로 얇은 쉘입니다. 따라서 CLI를 사용하여 현재 또는 미래의 등방성 기트 명령을 실행할 수 있어야합니다.
그것은 항상 현재 작업 디렉토리가 git 루트라는 가정으로 시작합니다. 예 { dir: '.' } .
minimisted 명령 줄 옵션을 구문 분석하고 동등한 JS 명령을 인쇄하고 출력 JSON을 인쇄합니다.
CLI는 isomorphic-git 신속하게 테스트하기위한 라크에 가깝고 실제로 git CLI 교체를 의미하지는 않습니다.
이 프로젝트는 시맨틱 버전화를 따르기 때문에 API를 계속 변경할 수 있지만 주요 버전 범프가 없으면 항상 거꾸로 호환됩니다.
귀하의 질문과 아이디어를 우리와 공유하십시오! 우리는 그것을 좋아합니다. Gitter Chatroom에서 우리를 찾거나 Github에서 문제를 만들 수 있습니다! 우리는 또한 트위터에서 @isomorphicgit입니다.
isomorphic-git 에 기여합니다개발 설정은 대형 웹 응용 프로그램의 개발 설정과 유사합니다. 주요 차이점은 테스트와 관련된 말도 안되는 양의 해킹입니다. 우리는 테스트를 위해 Facebook의 농담을 사용하여 TDD를 빠르고 재미있게 수행하지만 Karma를 통해 Jasmine을 사용하여 동일한 테스트가 브라우저에서 실행되도록 사용자 정의 해킹을 사용했습니다. 우리는 심지어 Git Repository 테스트 비품을 제공하기위한 자체 모의 서버도 있습니다!
Node.js가 설치되어야하지만 다른 모든 것은 devddependency입니다.
git clone https://github.com/isomorphic-git/isomorphic-git
cd isomorphic-git
npm install
npm test 더 많은 지침은 CONTRIBUTING 문서를 확인하십시오.
@creationix와 @chrisdickinson의 선구적인 작업이 없으면 이성식 Git은 불가능했을 것입니다. git은 까다로운 이진 혼란이며, 그들의 예제 (그리고 그들의 모듈!)없이 나는 이것을 끝내는 것에 가까이 올 수 없었을 것입니다. 그들은 그들의 시간보다 앞서 천재입니다.
크로스 브라우저 장치 테스트는 다음과 같이 제공됩니다.

이 멋진 사람들에게 감사합니다 (이모티콘 키) :
윌리엄 힐튼 ? ? | wdhtig ? | Marc MacLeod ? ? | 브렛 자미르 ? | 댄 앨런 ? ? | Tomáš Hübelbauer ? | 후안 캄파 ? |
이라 밀러 ? | Rhys Arkins | Sean Larkin | 다니엘 루프 | Bokuweb | Hiroki Osame | Jakub Jankiewicz ? |
하워드 고드 ? | Burningtyger ? | 멜빈 카발 호 | Akajes | 디마 사바 닌 ? | Koutaro Chikuba ? | 허버트 사 블로니 에르 |
David Duarte | 토마스 피틀 스키 ? | Vadim Markovtsev ? | 유시 무라 ? | 댄 린치 | Jeffrey Wescott ? | Zebzhao |
타일러 스미스 ? | Bram Borggreve ? | Stefan Guggisberg ? | 카탈린 pirvu | 니콜라스 넬슨 | 안나 헤닝슨 | Fabian Henneke ? |
djenck ? | 클레멘스 울프 | 소진 파크 | 에드워드 포크너 | Khải ? | 코빈 크 럭치 | 라이스 볼 리 |
Lin Onetwo | 林法鑫 ? | 윌 스토트 | 세스 니켈 ? | Alex Titarenko | 미샤 칼레 스키 | Richard C. Zulch |
mkizka | Ryotak ? | 노아 후멜 | 마이크 루이스 | Sam Verschueren | Vitor Luiz Cavalcanti | Shane McLaughlin |
Sean Poulter ? | Araknast | 라파엘 라브 | Lukáš Cezner | 데드 엔드 | 배리 | Alireza Mirian |
Danilkazanov | Eyal Hisco ? | 세바스티앙 | Yaroslav Halchenko | Alex Villarreal | 벤 모로우 | Jayree |
루카스 마틴 세 구라도 ? | 레온 카우처 | 길리 쇼하트 | 하비브 | Vinzent |
이 프로젝트는 All-Contritors 사양을 따릅니다. 모든 종류의 공헌을 환영합니다!
우리의 모든 후원자들에게 감사합니다! [후원자가되기]
스폰서가 되어이 프로젝트를 지원하십시오. 귀하의 로고는 귀하의 웹 사이트 링크와 함께 여기에 표시됩니다. [후원자가되기]
이 작업은 MIT 라이센스에 따라 릴리스됩니다