Menggunakan Git di beberapa sistem tanpa akses jaringan

Tutu Kaeen 10/17/2018. 5 answers, 6.777 views
git

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. Apakah saya masih dapat menggunakan Git dengan pengaturan ini? Dapatkah saya membuat tambalan kecil yang dapat saya terapkan pada repositori Git?

5 Answers


Bob 10/19/2018.

Tentu, tidak ada apa pun tentang Git yang memerlukan protokol tertentu. Hanya di luar kotak klien standar mendukung HTTP (S), SSH, protokol Git khusus dan, yang penting, protokol local . Itu hanya mengambil jalan ke direktori .git lokal, yang dapat 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 dapat, tentu saja, menambahkan flash drive sebagai remote:

git remote add origin /mnt/flashdrive/foo.git 

atau, di Windows:

git remote add origin F:\foo.git 

Atau bahkan menambahkannya sebagai remote tambahan dengan nama yang berbeda (jika Anda lebih suka origin menunjuk ke server Internet di suatu tempat):

git remote add flashdrive /mnt/flashdrive/foo.git 

Kemudian Anda hanya dapat mendorong / menarik ke / dari remote ini 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 menggunakan file:// protocol maka git akan menggunakan beberapa komponen jaringan standar (untuk berbicara dengan disk lokal), yang lebih lambat.


grawity 10/17/2018.

Di single 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 multiple komputer, ada beberapa metode.

Method 1a (no network at all): Anda dapat membuat 'repositori kosong' pada USB stick, lalu dorong ke sana dan tarik dari itu seperti yang Anda lakukan dengan repositori jarak jauh lainnya. Dengan kata lain, operasi repositori melalui jalur lokal tidak berbeda dari operasi melalui SSH atau HTTPS URL.

  1. Buat repositori 'remote':

    $ git init --bare /mnt/Stick/Repositories/Large_Project.git 
  2. Di komputer 1, tekan semuanya:

    $ cd ~/Large_Project
    $ git remote add usb /mnt/Stick/Repositories/Large_Project.git
    $ git push usb master 
  3. Di komputer 2, yah, sama seperti biasanya.

    $ git remote add usb /mnt/Stick/Repositories/Large_Project.git
    $ git pull usb 

(Anda dapat mendorong / mengambil / menarik dari URL atau jalur secara langsung juga.)

Method 1b (internal network): Jika Anda memiliki server internal dengan SSH yang tersedia, dan jika Git terpasang, Anda dapat melakukan the same as above , cukup tentukan alamat SSH menggunakan [user@]host:path atau ssh://[user@]host/path sintaks ssh://[user@]host/path .

  1. Buat repositori 'remote' dengan menjalankan git init --bare pada server yang ditunjuk (melalui SSH).

  2. Di komputer 1, cara yang sama seperti yang ditunjukkan sebelumnya.

    $ git remote add origin myserver.example.com:Gits/Large_Project.git 

    Atau jika Anda lebih suka:

    $ git remote add origin ssh://myserver.example.com/Gits/Large_Project.git 
  3. Di komputer 2, lagi-lagi sama dengan metode 1a.


Method 2: Anda dapat membuat 'bundel transfer' yang mengarsipkan daftar commit tertentu 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.

  1. Di komputer 1, buat bundel dari seluruh cabang:

    $ cd ~/Large_Project
    $ git bundle create /mnt/Stick/Project.bundle master
    $ git tag -f last-bundled master 
  2. Di komputer 2, tarik dari bundel seolah-olah itu adalah repositori:

    $ cd ~/Large_Project
    $ git pull /mnt/Stick/Project.bundle 

Bundel berikutnya tidak perlu mengepak seluruh master - mereka dapat mengemas hanya commit yang baru ditambahkan dari yang last-bundled..master sebagai gantinya.

  1. Di komputer 1, buat satu bundel dari commit yang baru ditambahkan:

    $ cd ~/Large_Project
    $ git bundle create /mnt/Stick/Project.bundle last-bundled..master
    $ git tag -f last-bundled master 
  2. Sama seperti di atas.


Vi. 10/17/2018.

git bundle create

Salah satu metodenya adalah menggunakan penyimpanan eksternal untuk bertukar data antar 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

gitbundletest$ mkdir repo1

gitbundletest$ cd repo1

repo1$ git init
Initialized empty Git repository in /tmp/gitbundletest/repo1/.git/
repo1$ echo 1 > 1 && git add 1 && git commit -m 1
[master (root-commit) c8b9ff9] 1
 1 file changed, 1 insertion(+)
 create mode 100644 1

repo1$ git bundle create /tmp/1.bundle master HEAD
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 384 bytes | 384.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0) 

"Kloning" ke repositori kedua (yaitu komputer kedua):

gitbundletest$ git clone /tmp/1.bundle repo2
Cloning into 'repo2'...
Receiving objects: 100% (3/3), done.

gitbundletest$ cd repo2/

repo2$ cat 1
1 

Melakukan beberapa perubahan dan "mendorong" mereka ke file bundel lain:

repo2$ echo 2 > 1 && git add 1 && git commit -m 2
[master 250d387] 2
 1 file changed, 1 insertion(+), 1 deletion(-)

repo2$ git bundle create /tmp/2.bundle origin/master..master origin/HEAD..HEAD
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 415 bytes | 415.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0) 

"menarik" perubahan ke repositori pertama:

repo2$ cd ../repo1

repo1$ git pull /tmp/2.bundle 
Receiving objects: 100% (3/3), done.
From /tmp/2.bundle
 * branch            HEAD       -> FETCH_HEAD
Updating c8b9ff9..250d387
Fast-forward
 1 | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

repo1$ cat 1
2 

Berbeda dengan bundel pertama, yang kedua hanya berisi sejarah Git parsial dan tidak secara langsung klon:

repo1$ cd ..

gitbundletest$ git clone /tmp/2.bundle repo3
Cloning into 'repo3'...
error: Repository lacks these prerequisite commits:
error: c8b9ff94942039469fa1937f6d38d85e0e39893a 
fatal: bad object 250d38747656401e15eca289a27024c61e63ed68
fatal: remote did not send all necessary objects 

Ada kerugian dalam menggunakan bundel yang Anda perlukan untuk menentukan secara spesifik kisaran komit apa yang harus ada dalam setiap bundel. Tidak seperti git push , git bundle tidak melacak apa yang ada di bundel sebelumnya, Anda perlu menyesuaikan secara manual refs/remotes/origin/master atau bundel akan lebih besar dari yang seharusnya.


kenorb 10/17/2018.

Anda harus menginstal Git terlebih dahulu. Kemudian untuk membuat repositori baru, jalankan dalam folder yang telah Anda salin:

git init 

Kemudian Anda dapat menambahkan file yang Anda ingin kontrol versi dengan git add (tambahkan -a untuk semua file) dan mulai melakukan perubahan ( git commit ).

Anda tidak perlu mendorong ke sembarang remote, karena Anda dapat bekerja pada sejarah lokal Anda ( git log ).

Untuk informasi lebih lanjut, periksa:


Mendorong / menarik tanpa internet

Menggunakan perintah git push , Anda dapat mendorong melalui SSH (menggunakan koneksi lokal, intranet):

git remote add server ssh://[user@]host.xz[:port]/path/to/dev/repo.git/
git push server 

atau mendorong ke folder:

git push /mnt/usb/my_repo 

Ini mengasumsikan Anda memiliki dua salinan repositori Anda.

Hal yang sama dengan menarik, misalnya

git pull /mnt/usb/my_repo 

Menambal

Untuk menerapkan tambalan, Anda bisa menggunakan perintah patch atau git apply .

Lihat: Buat tambalan atau file diff dari repositori git dan terapkan ke repositori git lain yang berbeda .


dhae 10/19/2018.

Anda dapat menggunakan Git secara lokal juga. Maka commit Anda hanya disimpan secara lokal, dan Anda masih memiliki kontrol versi dengannya (dan dapat diff / merge dll.), Tetapi Anda tidak dapat mengakses repositori dari komputer lain.

Anda dapat memulai repositori Git lokal dengan menjalankan git init di folder lokal Anda. Seperti yang dijelaskan di sini .


HighResolutionMusic.com - Download Hi-Res Songs

1 The Chainsmokers

Beach House flac

The Chainsmokers. 2018. Writer: Andrew Taggart.
2 (G)I-DLE

POP/STARS flac

(G)I-DLE. 2018. Writer: Riot Music Team;Harloe.
3 Anne-Marie

Rewrite The Stars flac

Anne-Marie. 2018. Writer: Benj Pasek;Justin Paul.
4 Ariana Grande

​Thank U, Next flac

Ariana Grande. 2018. Writer: Crazy Mike;Scootie;Victoria Monét;Tayla Parx;TBHits;Ariana Grande.
5 Diplo

Close To Me flac

Diplo. 2018. Writer: Ellie Goulding;Savan Kotecha;Peter Svensson;Ilya;Swae Lee;Diplo.
6 BTS

Waste It On Me flac

BTS. 2018. Writer: Steve Aoki;Jeff Halavacs;Ryan Ogren;Michael Gazzo;Nate Cyphert;Sean Foreman;RM.
7 Clean Bandit

Baby flac

Clean Bandit. 2018. Writer: Jack Patterson;Kamille;Jason Evigan;Matthew Knott;Marina;Luis Fonsi.
8 Imagine Dragons

Bad Liar flac

Imagine Dragons. 2018. Writer: Jorgen Odegard;Daniel Platzman;Ben McKee;Wayne Sermon;Aja Volkman;Dan Reynolds.
9 BlackPink

Kiss And Make Up flac

BlackPink. 2018. Writer: Soke;Kny Factory;Billboard;Chelcee Grimes;Teddy Park;Marc Vincent;Dua Lipa.
10 Nicki Minaj

No Candle No Light flac

Nicki Minaj. 2018. Writer: Denisia “Blu June” Andrews;Kathryn Ostenberg;Brittany "Chi" Coney;Brian Lee;TJ Routon;Tushar Apte;ZAYN;Nicki Minaj.
11 Rita Ora

Cashmere flac

Rita Ora. 2018. Writer: Sean Douglas;Lindy Robbins.
12 Backstreet Boys

Chances flac

Backstreet Boys. 2018.
13 Brooks

Limbo flac

Brooks. 2018.
14 Rita Ora

Velvet Rope flac

Rita Ora. 2018.
15 Fitz And The Tantrums

HandClap flac

Fitz And The Tantrums. 2017. Writer: Fitz And The Tantrums;Eric Frederic;Sam Hollander.
16 Little Mix

Woman Like Me flac

Little Mix. 2018. Writer: Nicki Minaj;Steve Mac;Ed Sheeran;Jess Glynne.
17 Cher Lloyd

None Of My Business flac

Cher Lloyd. 2018. Writer: ​iamBADDLUCK;Alexsej Vlasenko;Kate Morgan;Henrik Meinke;Jonas Kalisch;Jeremy Chacon.
18 Billie Eilish

When The Party's Over flac

Billie Eilish. 2018. Writer: Billie Eilish;FINNEAS.
19 Kelly Clarkson

Never Enough flac

Kelly Clarkson. 2018. Writer: Benj Pasek;Justin Paul.
20 Lil Pump

Arms Around You flac

Lil Pump. 2018. Writer: Rio Santana;Lil Pump;Edgar Barrera;Mally Mall;Jon Fx;Skrillex;Maluma;Swae Lee;XXXTENTACION.

Related questions

Hot questions

Language

Popular Tags