Saya ingin menggunakan kontrol versi tetapi, karena alasan keamanan, server yang saya kerjakan tidak memiliki akses internet: Saya hanya dapat memindahkan file pada USB flash drive. Masih bisakah saya menggunakan Git dengan pengaturan ini? Bisakah saya membuat tambalan kecil yang bisa saya terapkan di repositori Git?
84
server
untuk mesin yang tidak terhubung ke jaringan apa pun. Itu bisa saja jaringan lokal bahkan tanpa akses internet tapi tetap saja jaringan.Jawaban:
Tentu, tidak ada apa-apa tentang Git yang memerlukan protokol tertentu. Tepat di luar kotak klien standar mendukung HTTP (S), SSH, protokol custom Git dan, yang penting, protokol lokal . Itu hanya membutuhkan jalur ke
.git
direktori lokal , yang bisa berada di dalam direktori kerja (/path/to/project/.git
) atau hanya direktori kosong (/path/to/project.git
), meskipun penamaannya hanya sebuah konvensi.Ini berarti Anda tentu saja dapat menambahkan flash drive sebagai remote:
atau, di Windows:
Atau bahkan menambahkannya sebagai remote tambahan dengan nama yang berbeda (jika Anda lebih suka
origin
menunjuk ke server Internet di suatu tempat):Kemudian Anda bisa mendorong / menarik ke / dari remote ini sama seperti yang lain.
Jika Anda membaca dokumentasi , Anda akan melihat ada juga
file://
protokol yang berperilaku sedikit berbeda. Disarankan untuk menggunakan jalur lokal karena akan menggunakan beberapa optimisasi tambahan - jika Anda menggunakanfile://
protokol maka git akan menggunakan beberapa komponen jaringan standar (untuk berbicara dengan disk lokal), yang lebih lambat.sumber
file://
juga sedikit lebih fleksibel. Ini memungkinkan Anda untuk menggunakan beberapa fitur (seperti klon dangkal) yang tidak dapat Anda gunakan dengan jalur lokal.Pada satu komputer, tidak ada yang istimewa yang diperlukan. Jalankan
git init
di direktori yang Anda inginkan dan bekerja dengan Git seperti biasa.Untuk menyinkronkan repositori di beberapa komputer, ada beberapa metode.
Metode 1a (tidak ada jaringan sama sekali): Anda dapat membuat 'repositori telanjang' pada stik USB, lalu dorong ke sana dan tarik dari sana seperti halnya dengan repositori jarak jauh lainnya. Dengan kata lain, operasi repositori melalui jalur lokal tidak ada bedanya dengan operasi melalui SSH atau HTTPS URL.
Buat repositori 'jarak jauh':
Di komputer 1, dorong semuanya ke sana:
Di komputer 2, yah, sama seperti biasanya.
(Anda juga bisa mendorong / mengambil / menarik dari URL atau jalur.)
Metode 1b (jaringan internal): Jika Anda memiliki server internal dengan SSH tersedia, dan jika sudah menginstal Git, Anda dapat melakukan hal yang sama seperti di atas , cukup tentukan alamat SSH menggunakan sintaks
[user@]host:path
ataussh://[user@]host/path
.Buat repositori 'jarak jauh' dengan menjalankan
git init --bare <somepath.git>
server yang ditunjuk (via SSH).Di komputer 1, cara yang sama seperti yang ditunjukkan sebelumnya.
Atau jika Anda lebih suka:
Di komputer 2, sekali lagi sama dengan metode 1a.
Metode 2: Anda dapat membuat 'transfer bundel' yang mengarsipkan daftar komitmen yang diberikan ke dalam satu file.
Sayangnya, perintah bundel tidak secara otomatis mengingat apa yang sudah dibundel terakhir kali, sehingga penandaan manual atau pencatatan diperlukan. Saya hanya akan mengambil contoh dari manual git-bundle.
Di komputer 1, buat bundel seluruh cabang:
Di komputer 2, tarik dari bundel seolah-olah itu adalah repositori:
Bundel berikutnya tidak perlu mengemas keseluruhan
master
- mereka dapat mengemas hanya dari komit yang baru ditambahkanlast-bundled..master
.Di komputer 1, buat bundel komit yang baru ditambahkan:
Sama seperti di atas.
sumber
manual tagging or note-keeping is needed
, satu pilihan kecuali repo sangat besar adalahgit bundle create my.bundle --all
.git/
folder tersembunyi), tanpa 'pohon kerja' (file yang dapat diedit). Itu adalah bentuk yang disukai untuk repositori yang Anda inginkangit push
.git bundle create
Salah satu metode adalah dengan menggunakan penyimpanan eksternal untuk bertukar data antara repositori adalah git bundle . Dengan cara ini Anda hanya memiliki satu file untuk setiap transfer, bukan repositori Git menengah.
Setiap "git push" berubah menjadi pembuatan file, "git fetch" mengambil sesuatu dari file itu.
Sesi demo
Membuat repositori pertama dan melakukan "push" pertama
"kloning" ke repositori kedua (yaitu komputer kedua):
Melakukan beberapa perubahan dan "mendorong" mereka ke file bundel lain:
"menarik" perubahan ke repositori pertama:
Berbeda dengan bundel pertama, bundel kedua hanya berisi sebagian riwayat Git dan tidak dapat dikloning secara langsung:
Ada kerugian dalam menggunakan bundel yang harus Anda tentukan secara manual berapa kisaran komit yang harus dikandung setiap bundel. Tidak seperti
git push
,git bundle
tidak melacak apa yang ada di bundel sebelumnya, Anda perlu menyesuaikan secara manualrefs/remotes/origin/master
atau bundel akan lebih besar dari yang seharusnya.sumber
--all
bendera untuk mendapatkan semuanya. Jika repo cukup kecil, ini adalah proses paling sederhana karena Anda cukup mentransfer semuanya setiap waktu! Hanya saja, jangan kehilangan memory stick - mungkin masalah keamanan terbesar!Anda harus menginstal Git terlebih dahulu . Kemudian untuk membuat repositori baru, jalankan di dalam folder yang telah Anda salin:
Kemudian Anda dapat menambahkan file yang ingin Anda kontrol versi
git add
(tambahkan-a
untuk semua file) dan mulai melakukan perubahan (git commit
).Anda tidak harus mendorong ke kendali jarak jauh, karena Anda dapat mengerjakan riwayat lokal Anda (
git log
).Untuk informasi lebih lanjut, periksa:
git
- panduan sederhanaMendorong / menarik tanpa internet
Menggunakan
git push
perintah, dimungkinkan untuk mendorong SSH (menggunakan koneksi lokal, intranet):atau mendorong ke folder:
Ini mengasumsikan Anda memiliki dua salinan repositori Anda.
Sama dengan menarik, misalnya
Menambal
Untuk menerapkan tambalan, Anda dapat menggunakan
patch
perintah ataugit apply
.Lihat: Membuat file tambalan atau berbeda dari repositori git dan menerapkannya ke repositori git lain .
sumber
Anda dapat menggunakan Git secara lokal juga. Kemudian komit Anda hanya disimpan secara lokal, dan Anda masih memiliki kontrol versi dengannya (dan dapat berbeda / lain-lain), tetapi Anda tidak dapat mengakses repositori dari komputer lain.
Anda dapat memulai repositori Git lokal dengan menjalankan
git init
di folder lokal Anda. Seperti dijelaskan di sini .sumber