isomorphic-git เป็นการปรับแต่ง JavaScript บริสุทธิ์ของ GIT ที่ใช้งานได้ทั้งใน Node.js และสภาพแวดล้อม JavaScript ของเบราว์เซอร์ มันสามารถอ่านและเขียนไปยังที่เก็บ GIT ดึงข้อมูลจากและผลักไปยัง GIT Remotes (เช่น GitHub) ทั้งหมดที่ไม่มีการพึ่งพาโมดูล C ++ ดั้งเดิม
Isomorphic-Git มีจุดมุ่งหมายเพื่อการทำงานร่วมกัน 100% กับการใช้งาน GIT ที่เป็นที่ยอมรับ ซึ่งหมายความว่ามันดำเนินการทั้งหมดโดยการปรับเปลี่ยนไฟล์ในไดเรกทอรี ".git" เช่นเดียวกับ Git ที่คุณคุ้นเคย isogit CLI ที่รวมอยู่สามารถทำงานบนที่เก็บ GIT บนเดสก์ท็อปหรือเซิร์ฟเวอร์ของคุณ
ห้องสมุดนี้มีจุดมุ่งหมายที่จะเป็นโซลูชันที่สมบูรณ์โดยไม่จำเป็นต้องมีการประกอบ API ได้รับการออกแบบด้วยเครื่องมือที่ทันสมัยเช่น Rollup และ Webpack ในใจ ด้วยการให้ฟังก์ชั่นเป็นฟังก์ชั่นแต่ละฟังก์ชั่นรหัส Bundlers สามารถสร้างชุดที่เล็กลงได้โดยรวมถึงฟังก์ชั่นที่แอปพลิเคชันของคุณใช้เท่านั้น
โครงการรวมถึงคำจำกัดความประเภทเพื่อให้คุณสามารถเพลิดเพลินไปกับการตรวจสอบประเภทคงที่และการกรอกรหัสอัจฉริยะในบรรณาธิการเช่นรหัส VS และรหัสและกล่อง
ผู้เขียนดั้งเดิมของโครงการ (Billie Hilton) ออกจากโครงการ แต่โครงการยังคงอยู่โดยอาสาสมัครสองคน:
แต่พวกเขาไม่ได้เขียนโค้ดมากนักส่วนใหญ่ทำรีวิวรหัสและพยายามตอบคำถามและใน Gitter พวกเขาไม่ต้องการให้โครงการตาย ดังนั้นคุณสามารถพูดได้ว่าโครงการนี้เป็นชุมชนที่ขับเคลื่อนด้วย (เนื่องจาก JCUBIC ตอบคำถามเสมอ) ซึ่งหมายความว่าหากคุณต้องการให้มีการดำเนินการคุณลักษณะคุณต้องทำสิ่งนี้ด้วยตัวเองหรือหาคนที่เต็มใจเขียนรหัสให้คุณ โครงการมีเงินเกี่ยวกับ OpenCollective และเราสามารถใช้จ่ายในการพัฒนาบางอย่างหากคุณพบ Somoene ที่เต็มใจที่จะเขียนรหัสเพื่อแลกกับ Bucks บางตัว (อาจเป็นคุณ) แต่เราไม่ได้มีอะไรมากมายดังนั้นอย่าคาดหวังว่าจะมี Sallary เต็มรูปแบบ
หากคุณต้องการช่วยเหลือโครงการนี้คุณก็ยินดีที่จะทำเช่นนั้น
สภาพแวดล้อมต่อไปนี้ได้รับการทดสอบใน CI และจะได้รับการสนับสนุนต่อไปจนกว่าจะถึงเวอร์ชันการทำลายครั้งต่อไป:
โหนด 10 | Chrome 79 | ขอบ 79 | Firefox 72 | ซาฟารี 13 | Android 10 | iOS 13 |
ดูบันทึกย่อการเปิดตัวเต็มรูปแบบใน GitHub และโพสต์บล็อกรีลีส
คุณสามารถติดตั้งได้จาก NPM:
npm install --save isomorphic-git
"isomorphic" ใน isomorphic-git หมายความว่ารหัสเดียวกันทำงานในเซิร์ฟเวอร์หรือเบราว์เซอร์ นั่นเป็นเรื่องยากที่จะทำเนื่องจาก Git ใช้ระบบไฟล์และทำคำขอ HTTP เบราว์เซอร์ไม่มีโมดูล fs และโหนดและเบราว์เซอร์มี API ที่แตกต่างกันสำหรับการร้องขอ HTTP!
ดังนั้นแทนที่จะใช้โมดูล 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 ไม่เป็นไปตามความต้องการของคุณ isomorphic-git ควรทำงานกับเบราว์เซอร์และฟิลเลอร์ แทนที่จะเป็น 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 คุณสามารถใช้การนำเข้าเริ่มต้นเพื่อความสะดวกหรือชื่อนำเข้าเพื่อรับประโยชน์จากการเขย่าต้นไม้หากคุณใช้ Bundler:
import git from 'isomorphic-git'
// or
import * as git from 'isomorphic-git'
// or
import { plugins , clone , commit , push } from 'isomorphic-git'ดูคู่มือการเริ่มต้นใช้งานเต็มรูปแบบบนเว็บไซต์ DOCS
จากนั้นตรวจสอบหน้าตัวอย่างที่มีประโยชน์ซึ่งรวมถึงรหัสตัวอย่างเพิ่มเติมที่เขียนโดยชุมชน!
น่าเสียดายที่เนื่องจากนโยบายต้นกำเนิดเดียวกันโดยค่าเริ่มต้น isomorphic-git สามารถโคลนจากแหล่งกำเนิดเดียวกันกับหน้าเว็บที่กำลังทำงานอยู่ นี่เป็นสิ่งที่ไม่สะดวกอย่างมากเนื่องจากหมายถึงวัตถุประสงค์ในทางปฏิบัติทั้งหมดในการโคลนนิ่งและการผลักดัน repos จะต้องทำผ่านพร็อกซี
เพื่อจุดประสงค์นี้ @isomorphic-git/cors-proxy มีอยู่ซึ่งคุณสามารถติดตั้งโคลนหรือ npm install สำหรับการทดสอบหรือโครงการขนาดเล็กคุณยังสามารถใช้ https://cors.isomorphic-git.org - พร็อกซีฟรีที่ได้รับการสนับสนุนจาก Clever Cloud
ฉันหวังว่าจะได้รับส่วนหัวของ CORS ในแพลตฟอร์ม Git Hosting ทั้งหมดในที่สุดและจะแสดงรายการความคืบหน้าของฉันที่นี่:
| บริการ | รองรับคำขอ CORS |
|---|---|
| Gogs (โฮสต์ตัวเอง) | |
| Gitea (โฮสต์ตัวเอง) | |
| Azure Devops | ✔ (หมายเหตุการใช้งาน: ต้องมีการรับรองความถูกต้อง) |
| Gitlab | การประชาสัมพันธ์ของฉันถูกปฏิเสธ แต่ปัญหายังคงเปิดอยู่! |
| Bitbucket | |
| คนอื่น ๆ |
มันเป็นเพียงสองบรรทัดของรหัสเพื่อเพิ่มส่วนหัว CORS !! สิ่งง่ายๆ แน่นอนว่ามันจะเกิดขึ้น
isogit cli Isomorphic-Git มาพร้อมกับเครื่องมือ CLI ที่เรียบง่ายชื่อ isogit เพราะ isomorphic-git เป็นจำนวนมากที่จะพิมพ์ มันเป็นเพียงเชลล์บาง ๆ ที่แปลอาร์กิวเมนต์บรรทัดคำสั่งลงในคำสั่ง JS API ที่เทียบเท่า ดังนั้นคุณควรจะสามารถเรียกใช้คำสั่ง isomorphic-git ใน ปัจจุบัน หรืออนาคตโดยใช้ CLI
มันเริ่มต้นด้วยสมมติฐานที่ว่าไดเรกทอรีการทำงานในปัจจุบันเป็นรูท GIT เช่น { dir: '.' } .
มันใช้ตัวเลือกบรรทัดคำสั่ง minimisted to parse และจะพิมพ์คำสั่ง JS เทียบเท่าและพิมพ์ output json
CLI นั้นมีความสนุกสนานมากกว่าสำหรับการทดสอบ isomorphic-git อย่างรวดเร็วและไม่ได้หมายถึงการเปลี่ยน git CLI
โครงการนี้เป็นไปตามเวอร์ชันความหมายดังนั้นฉันอาจทำการเปลี่ยนแปลง API ต่อไป แต่พวกเขาจะเข้ากันได้ย้อนหลังอยู่เสมอเว้นแต่จะมีรุ่นสำคัญชน
แบ่งปันคำถามและแนวคิดของคุณกับเรา! เราชอบที่ คุณสามารถค้นหาเราได้ในห้องแชท Gitter ของเราหรือเพียงแค่สร้างปัญหาที่นี่ใน GitHub! เรายังเป็น @isomorphicgit บน Twitter
isomorphic-gitการตั้งค่าการพัฒนานั้นคล้ายคลึงกับเว็บแอปพลิเคชันขนาดใหญ่ ความแตกต่างที่สำคัญคือจำนวนแฮ็คที่ไร้สาระที่เกี่ยวข้องในการทดสอบ เราใช้ความตลกขบขันของ Facebook สำหรับการทดสอบซึ่งทำให้ TDD เร็วและสนุก แต่เรายังใช้แฮ็กที่กำหนดเองเพื่อให้การทดสอบเดียวกันนี้จะทำงานในเบราว์เซอร์โดยใช้จัสมินผ่านกรรม เรายังมีเซิร์ฟเวอร์จำลองของเราเองสำหรับให้บริการอุปกรณ์ทดสอบที่เก็บ 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 - | Marc MacLeod - - | Brett Zamir - | แดนอัลเลน - - | TomášHübelbauer - | Juan Campa - |
ไอรามิลเลอร์ - | Rhys Arkins | ฌอนลาร์กิน | Daniel Ruf | Bokuweb | Hiroki Osame | Jakub Jankiewicz - |
Howardgod - | การเผาไหม้ - | Melvin Carvalho | akajes | dima sabanin - | Koutaro Chikuba - | Hubert Sablonnière |
David Duarte | Thomas Pytleski - | Vadim Markovtsev - | Yu Shimura - | แดนลินช์ | Jeffrey Wescott - | Zebzhao |
Tyler Smith - | Bram Borggreve - | Stefan Guggisberg - | Catalin Pirvu | นิโคลัสเนลสัน | Anna Henningsen | Fabian Henneke - |
Djencks - | Clemens Wolff | สวนโซจิน | Edward Faulkner | Khải - | Corbin Crutchley | ลูกบอลลี |
lin onetwo | 林法鑫 - | จะ Stott | Seth Nickell - | Alex Titarenko | Misha Kaletsky | Richard C. Zulch |
mkizka | Ryotak - | โนอาห์ฮัมเมล | ไมค์เลวิส | Sam Verschueren | Vitor Luiz Cavalcanti | Shane McLaughlin |
Sean Poulter - | ชาวอรานาสต์ | Rafael Raab | Lukáš Cezner | สิ้นตาย | แบร์รี่ | Alireza Mirian |
Danilkazanov | Eyal Hisco - | ชาวเซบาสเตียน | Yaroslav Halchenko | Alex Villarreal | เบ็นมอร์โรว์ | เจย์รี |
Lucas Martin Segurado - | Leon Kaucher | Gili Shohat | habib | Vinzent |
โครงการนี้เป็นไปตามข้อกำหนดทั้งหมดของผู้เข้าร่วม การมีส่วนร่วมทุกชนิดยินดีต้อนรับ!
ขอบคุณผู้สนับสนุนของเราทุกคน! [เป็นผู้สนับสนุน]
สนับสนุนโครงการนี้โดยการเป็นสปอนเซอร์ โลโก้ของคุณจะปรากฏขึ้นที่นี่พร้อมลิงค์ไปยังเว็บไซต์ของคุณ [เป็นสปอนเซอร์]
งานนี้เปิดตัวภายใต้ใบอนุญาต MIT