Hosting Lampiran Git di server tanpa git-lampiran diinstal

9

Mesin A dan B host repositori git annex yang umum . Keduanya memiliki program git-lampiran yang diinstal dan saya secara manual mengedit / melakukan / etc barang di kedua mesin. A & B tidak terhubung ke internet secara bersamaan, sehingga mereka tidak dapat disinkronkan secara langsung.

Server C selalu aktif dan terhubung (dan gratis dan cukup aman). Ini sudah diinstal git, tapi saya tidak punya hak admin, jadi saya tidak bisa menginstal git-lampiran.

Pertanyaan saya: Dapatkah saya menggunakan Server C sebagai hub pusat untuk mendorong dan menarik pembaruan git-lampiran dari A dan B, tanpa harus menginstal git-lampiran dan seluruh dependensi haskell ghc pada C?

Saya mencoba menggunakan C dengan "direktori" atau "rsync" remote khusus , tetapi ini tampaknya hanya menyimpan file, bukan sisa dari apa yang diperlukan untuk memperbarui A dan B setelah push / pull.

Petunjuk apa pun akan sangat dihargai!

Vincent
sumber

Jawaban:

6

Dengan akses git dan rsync ke server yang sama Anda dapat menggunakan server itu untuk menyimpan riwayat (melalui akses git) dan toko nilai kunci tambahan (melalui akses rsync). Ini juga dapat dipisahkan dan disimpan pada sejumlah server yang berbeda.

Sepertinya Anda sudah membaca semua alat yang Anda butuhkan. Pada dasarnya, Anda akan berakhir dengan 2 remote terpisah, keduanya menunjuk ke lokasi yang berbeda di server-c. Remote pertama (server-c) adalah remote git biasa untuk menyinkronkan riwayat Anda dan apa pun yang diperiksa langsung ke repo git. Remote kedua adalah lampiran khusus tambahan.

[remote "server-c"]
    url = [email protected]:/path/to/repo.git
    fetch = +refs/heads/*:refs/remotes/server-c/*
[remote "server-c-rsync"]
    annex-rsyncurl = example.com:/home/user/annex-rsync
    annex-uuid = ...

Anda harus dapat mengatur ini dengan sesuatu seperti:

git remote add server-c [email protected]:/path/to/repo.git
git annex initremote server-c-rsync type=rsync rsyncurl=example.com:/home/user/annex-rsync encryption=none

Ini akan memberi Anda fungsionalitas dasar yang Anda cari. Satu-satunya downside adalah bahwa Anda memiliki 2 nama jarak jauh yang berbeda yang benar-benar menunjuk ke server yang sama. Khususnya Anda hanya perlu ingat untuk menggunakan remote khusus (server-c-rsync) saat menggunakan --to = atau --from = argumen get, copy, dan move.

Dimungkinkan untuk mengarahkan remote tunggal ke kedua lokasi, namun saya tidak yakin apakah ini benar-benar didukung. Perintah berikut muncul untuk membuat .git / config yang masuk akal.

git init
git annex init "test"
git remote add server-c [email protected]:/path/to/repo.git
git annex initremote server-c type=rsync rsyncurl=example.com:/rsync/user encryption=none

Bagi saya ini menghasilkan sebuah remote tunggal di .git / config dengan kedua url = (untuk operasi git normal) dan lampiran-rsyncurl =. Namun, saya belum mengujinya lebih jauh untuk memastikan bahwa git annex mengabaikan url dan hanya menggunakan entri annex-rsyncurl ketika beroperasi dengan file yang dilampirkan.

Justin Geibel
sumber
Bagus! Saya akan melakukan beberapa pengujian, tetapi ini akan membuat saya cukup dekat dengan solusi yang bisa diterapkan. Terima kasih banyak atas waktu dan jawaban Anda!
Vincent
Senang bisa membantu. Saya baru mulai menggunakan lampiran git selama liburan dan sejauh ini saya sangat senang dengan itu!
Justin Geibel
Saya pikir contoh terakhir hanya bekerja. pada kenyataannya, saya pikir itu akan rsync file di tempat bahkan jika itu hanya repo git ...
anarcat