isomorphic-git adalah penerimaan git JavaScript murni yang berfungsi di lingkungan Node.js dan browser JavaScript. Ini dapat membaca dan menulis kepada repositori git, mengambil dari dan mendorong ke git remote (seperti github), semua tanpa dependensi modul C ++ asli.
Isomorphic-Git bertujuan untuk 100% interoperabilitas dengan implementasi GIT kanonik. Ini berarti ia melakukan semua operasinya dengan memodifikasi file di direktori ".git" seperti halnya git yang biasa Anda lakukan. isogit CLI yang disertakan dapat beroperasi pada repositori git di desktop atau server Anda.
Perpustakaan ini bertujuan untuk menjadi solusi lengkap tanpa rakitan yang diperlukan. API telah dirancang dengan alat modern seperti rollup dan webpack dalam pikiran. Dengan memberikan fungsionalitas sebagai fungsi individu, bundler kode dapat menghasilkan bundel yang lebih kecil dengan memasukkan hanya fungsi yang digunakan aplikasi Anda.
Proyek ini mencakup definisi tipe sehingga Anda dapat menikmati pemeriksaan jenis statis dan penyelesaian kode cerdas pada editor seperti VS Code dan CodesandBox.
Penulis asli proyek (Billie Hilton) meninggalkan proyek, tetapi proyek ini masih dikelola oleh dua sukarelawan:
Tetapi mereka tidak menulis banyak kode, terutama melakukan tinjauan kode dan mencoba menjawab masalah dan pada gitter, mereka hanya tidak ingin proyek mati. Jadi Anda dapat mengatakan bahwa proyek ini didorong oleh komunitas (karena JCubic selalu membalas masalah). Yang berarti bahwa jika Anda ingin fitur diterapkan, Anda perlu melakukan ini sendiri atau menemukan seseorang yang bersedia menulis kode untuk Anda. Proyek ini memiliki sejumlah uang untuk OpenCollective dan kami dapat membelanjakannya untuk beberapa pengembangan, jika Anda menemukan somoene yang bersedia mengkode dengan imbalan dengan beberapa dolar (mungkin Anda), tetapi kami tidak memiliki banyak sehingga jangan berharap memiliki kekayaan penuh.
Jika Anda ingin membantu proyek ini, Anda dipersilakan untuk melakukannya.
Lingkungan berikut diuji dalam CI dan akan terus didukung sampai versi Breaking berikutnya:
Node 10 | Chrome 79 | Tepi 79 | Firefox 72 | Safari 13 | Android 10 | iOS 13 |
Lihat catatan rilis lengkap tentang GitHub dan posting blog rilis.
Anda dapat menginstalnya dari NPM:
npm install --save isomorphic-git
"Isomorfik" dalam isomorphic-git berarti bahwa kode yang sama berjalan di server atau browser. Itu sulit dilakukan karena Git menggunakan sistem file dan membuat permintaan HTTP. Browser tidak memiliki modul fs . Dan Node dan Browser memiliki API yang berbeda untuk membuat permintaan HTTP!
Jadi, alih-alih mengandalkan modul fs dan http , isomorphic-git memungkinkan Anda membawa sistem file Anda sendiri dan klien HTTP.
Jika Anda menggunakan isomorphic-git di node, Anda menggunakan modul fs asli dan klien http simpul yang disediakan.
// 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 ) Jika Anda menggunakan isomorphic-git di browser, Anda akan membutuhkan sesuatu yang meniru fs API. Yang paling mudah diatur dan sebagian besar perpustakaan berkinerja adalah Lightningfs yang ditulis dan dikelola oleh penulis yang sama dan merupakan bagian dari suite isomorphic-git . Jika petir tidak memenuhi kebutuhan Anda, isomorfik-git juga harus bekerja dengan browserfs dan filer. Alih-alih isomorphic-git/http/node kali ini impor 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 >Jika Anda menggunakan Sintaks Modul ES, Anda dapat menggunakan impor default untuk kenyamanan, atau impor bernama untuk mendapatkan manfaat dari pelepasan pohon jika Anda menggunakan bundler:
import git from 'isomorphic-git'
// or
import * as git from 'isomorphic-git'
// or
import { plugins , clone , commit , push } from 'isomorphic-git'Lihat Panduan Memulai Lengkap Di Situs Web Docs.
Kemudian periksa halaman cuplikan yang bermanfaat, yang mencakup lebih banyak kode sampel yang ditulis oleh komunitas!
Sayangnya, karena kebijakan asal-asal dengan isomorphic-git default hanya dapat mengkloning dari asal yang sama dengan halaman web yang dijalankannya. Ini sangat merepotkan, karena artinya untuk semua tujuan praktis mengkloning dan mendorong repo harus dilakukan melalui proxy.
Untuk tujuan ini @isomorphic-git/cors-proxy ada yang dapat Anda klon atau npm install . Untuk pengujian atau proyek kecil, Anda juga dapat menggunakan https://cors.isomorphic-git.org - proxy gratis yang disponsori oleh Clever Cloud.
Saya berharap untuk mendapatkan header CORS ditambahkan ke semua platform hosting git utama pada akhirnya, dan akan mencantumkan kemajuan saya di sini:
| Melayani | Mendukung permintaan CORS |
|---|---|
| Gogs (diselenggarakan sendiri) | ✔ |
| Gitea (diselenggarakan sendiri) | ✔ |
| Azure DevOps | ✔ (Catatan Penggunaan: Membutuhkan Otentikasi) |
| Gitlab | PR saya ditolak, tetapi masalahnya masih terbuka! |
| Bitbucket | |
| GitHub |
Secara harfiah hanya dua baris kode untuk menambahkan header CORS !! Barang mudah. Tentunya itu akan terjadi.
isogit cli Isomorphic-Git hadir dengan alat CLI sederhana, bernama isogit karena isomorphic-git banyak untuk mengetik. Ini benar -benar hanya shell tipis yang menerjemahkan argumen baris perintah ke dalam perintah JS API yang setara. Jadi, Anda harus dapat menjalankan perintah isomorfik-git saat ini atau di masa depan menggunakan CLI.
Itu selalu dimulai dengan asumsi bahwa direktori kerja saat ini adalah akar git. Misalnya { dir: '.' } .
Ini menggunakan opsi baris perintah minimisted untuk parse dan akan mencetak perintah JS yang setara dan mencetak cukup output JSON.
CLI lebih dari seekor burung untuk dengan cepat menguji isomorphic-git dan tidak benar-benar dimaksudkan sebagai pengganti git CLI.
Proyek ini mengikuti versi semantik, jadi saya dapat terus membuat perubahan pada API tetapi mereka akan selalu kompatibel ke belakang kecuali ada benjolan versi utama.
Bagikan pertanyaan dan ide Anda dengan kami! Kami menyukainya. Anda dapat menemukan kami di ruang obrolan gitter kami atau hanya membuat masalah di sini di GitHub! Kami juga @isomorphicgit di Twitter.
isomorphic-gitPengaturan pengembangan mirip dengan aplikasi web besar. Perbedaan utama adalah jumlah retasan konyol yang terlibat dalam tes. Kami menggunakan Jest Facebook untuk pengujian, yang membuat TDD cepat dan menyenangkan, tetapi kami juga menggunakan peretasan khusus sehingga tes yang sama juga akan berjalan di browser menggunakan Jasmine melalui Karma. Kami bahkan memiliki server tiruan kami sendiri untuk melayani perlengkapan uji repositori git!
Anda perlu diinstal node.js, tetapi yang lainnya adalah ketergantungan devdependency.
git clone https://github.com/isomorphic-git/isomorphic-git
cd isomorphic-git
npm install
npm test Lihat dokumen CONTRIBUTING untuk instruksi lebih lanjut.
Isomorphic-git tidak akan mungkin terjadi tanpa pekerjaan perintis oleh @Creationix dan @chrisdickinson. Git adalah kekacauan biner yang rumit, dan tanpa contoh mereka (dan modul mereka!) Saya tidak akan bisa mendekati menyelesaikan ini. Mereka adalah jenius sebelum waktu mereka.
Pengujian perangkat lintas-browser disediakan oleh:

Terima kasih kepada orang -orang yang luar biasa ini (Kunci 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 | Taman Sojin | Edward Faulkner | Khải ? | Corbin Crutchley | RiceBall Lee |
Lin Onetwo | 林法鑫 ? | Will Stott | Seth Nickell ? | Alex Titarenko | Misha Kaletsky | Richard C. Zulch |
mkizka | Ryotak ? | Nuh Hummel | Mike Lewis | Sam Verschueren | Vitor Luiz Cavalcanti | Shane McLaughlin |
Sean Poulter ? | Araknast | Rafael Raab | Lukáš Cezner | buntu | Barry | ALIREZA MIRIAN |
Danilkazanov | Eyal Hisco ? | Sebastien | Yaroslav Halchenko | Alex Villarreal | Ben Morrow | Jayree |
Lucas Martin Segurado ? | Leon Kaucher | Gili Shohat | Habib | Vinzent |
Proyek ini mengikuti spesifikasi semua-kontributor. Kontribusi apa pun yang baik!
Terima kasih untuk semua pendukung kami! [Menjadi pendukung]
Dukung proyek ini dengan menjadi sponsor. Logo Anda akan muncul di sini dengan tautan ke situs web Anda. [Menjadi sponsor]
Pekerjaan ini dirilis di bawah lisensi MIT