Jawaban yang benar adalah dengan melakukan: git clone --mirror [email protected]/your-repo.git Ini akan menyalin seluruh repositori, catatan, cabang, pelacakan, dll.
John
Beberapa pencarian web yang saya jalankan tidak menyertakan pertanyaan ini dalam hasilnya: "git clone absolut semua catatan tanda cabang"; "git mengkloning semua yang ada di repositori"; "git mengkloning repo dengan semua catatan tag".
Kenny Evitt
Jawaban:
66
Ada apa dengan hanya membuat tiruannya?
git clone --mirror other/repo.git
Setiap repositori adalah cadangan dari remote-nya.
@Daniel: Jika Anda menggandakan repositori, Anda mengambil setiap cabang, tetapi hanya yang default yang diperiksa. Coba git branch -a. Mungkin lebih jelas begini: Setelah mengkloning repositori Anda tidak mengambil setiap cabang, Anda mengambil setiap komit. Cabang hanya merujuk ke komit yang ada.
KingCrunch
1
Saya pikir dia tahu perintah klon dengan baik, jika dia bisa menanyakan pertanyaan seperti itu, dan itu jelas tidak cukup baginya (karena itu adalah klon, dan bukan dump). Dump adalah hal yang berbeda dari salinan sederhana, misalnya: 1) tidak perlu optimal (atau bahkan mampu) untuk pekerjaan normal 2) tetapi dituntut memiliki ketahanan dan repairibilitas yang baik terhadap korupsi data.
peterh
@peterh Tentu, tapi git clonemencakup semua itu. (1) bersifat opsional, bukan persyaratan. Jika hasilnya masih optimal, itu masih cadangan (2) sudah tercakup oleh git itu sendiri. - Poin yang ingin saya berikan adalah, jika git clonesudah mencakup poin-poin yang relevan, untuk apa Anda membutuhkan alat yang berbeda? Meskipun saya juga lebih suka git bundlesaya tidak berpikir jawaban saya salah, atau tidak valid. Anda dapat melihat kedua pendekatan sebagai hot- vs cold-backup.
KingCrunch
bagaimana dengan izin file? apakah git clone selalu menyalinnya? tergantung pada pilihan yang saya percaya
git bundlehanya akan mengemas referensi yang ditunjukkan oleh git show-ref : ini termasuk head, tag, dan remote head.
Sangat penting bahwa basis yang digunakan dipegang oleh destinasi.
Tidak apa-apa untuk melakukan kesalahan di sisi kehati-hatian, menyebabkan file bundel berisi objek yang sudah ada di tujuan, karena ini diabaikan saat membongkar di tujuan.
Untuk menggunakan bundel itu, Anda dapat mengkloningnya, dengan menentukan folder yang tidak ada (di luar repo git apa pun):
Ini, git bundlejawaban yang benar menurut saya, dan bukan yang diterima. Saya pikir dia tahu perintah klon dengan baik, jika dia bisa menanyakan pertanyaan seperti itu, dan itu jelas tidak cukup baginya (karena itu adalah klon, dan bukan dump). Dump adalah hal yang berbeda dari salinan sederhana, misalnya: 1) tidak perlu optimal (atau bahkan mampu) untuk pekerjaan normal 2) tetapi dituntut memiliki ketahanan dan repairibilitas yang baik terhadap korupsi data 3) Seringkali berguna jika mereka dengan mudah dapat di-diff untuk cadangan tambahan, sementara itu bukan tujuan pada salinan.
peterh
3
Perhatikan bahwa tidak ada git bundleatau git clonemendapatkan semuanya , misalnya skrip hook.
Zitrax
2
@Zitrax Ya, memang sesuai desain. Pengait bisa berbahaya atau menyertakan informasi sensitif.
VonC
Dapatkah saya menggunakan git bundlerepo jarak jauh?
Ryan Shillington
24
Memperluas beberapa jawaban lain, inilah yang saya lakukan:
Kemudian saat Anda ingin menyegarkan cadangan: git remote updatedari lokasi klon.
Ini mencadangkan semua cabang dan tag, termasuk yang baru yang ditambahkan kemudian, meskipun perlu dicatat bahwa cabang yang dihapus tidak terhapus dari klon (yang untuk cadangan mungkin merupakan hal yang baik).
Ini adalah atom sehingga tidak memiliki masalah seperti salinan sederhana.
Setelah itu Anda memiliki file bernama reponame.bundleyang dapat dengan mudah disalin. Anda kemudian dapat membuat repositori git normal baru dari itu menggunakan git clone reponame.bundle reponame.
Perhatikan bahwa git bundlehanya salinan komit yang mengarah ke beberapa referensi (cabang atau tag) di repositori. Jadi, komitmen kusut tidak disimpan ke bundel.
Saya pikir maksud Anda git bundle create reponame.bundle --all?
joe
Terima kasih @ Joe karena memperhatikan itu. Pastinya. Saya akan memperbarui jawabannya.
Kimmo Ahokas
5
gunakan git bundle, atau clone
menyalin direktori git bukanlah solusi yang baik karena tidak atomic. Jika Anda memiliki repositori besar yang membutuhkan waktu lama untuk menyalin dan seseorang mendorong ke repositori Anda, itu akan memengaruhi pencadangan Anda. Mengkloning atau membuat bundel tidak akan mengalami masalah ini.
Apakah ini berarti, mencadangkan SEMUA konten direktori yang berisi proyek Git saja sudah cukup?
Ravindranath Akila
1
Setuju dengan Sunil - ini tampaknya bukan operasi atom.
jia103
1
Dan bagaimana Anda memastikan tidak ada perubahan yang dilakukan pada file di direktori tersebut saat membuat cadangan?
Raedwald
Seperti yang diisyaratkan Raedwald, metode ini dapat menghasilkan pencadangan yang tidak konsisten dan karenanya menyebabkan hilangnya data. Oleh karena itu jawaban ini harus dihilangkan, atau paling tidak, memperingatkan tentang kemungkinan kehilangan data.
Abhishek Anand
Saya pikir dia tahu perintah copyor dengan cpsangat baik dan itu tidak sesuai dengan kebutuhannya. Dan menurut saya, menurutnya repositori kosong (meskipun bisa juga disalin, menurut saya ini bukan cadangan berfitur lengkap).
peterh
4
Utas ini sangat membantu untuk mendapatkan beberapa wawasan bagaimana backup repo git dapat dilakukan. Menurut saya masih kurang beberapa petunjuk, informasi atau kesimpulan untuk menemukan "cara yang benar" (tm) bagi diri sendiri. Oleh karena itu berbagi pemikiran saya di sini untuk membantu orang lain dan menempatkan mereka untuk diskusi untuk meningkatkan mereka. Terima kasih.
Jadi, mulailah dengan mengambil pertanyaan asli:
Tujuannya adalah untuk mendapatkan backup "lengkap" dari repositori git sedekat mungkin.
Kemudian memperkayanya dengan keinginan khas dan menentukan beberapa pengaturan awal:
Backup melalui "hot-copy" lebih disukai untuk menghindari waktu henti layanan.
Kekurangan git akan diatasi dengan perintah tambahan.
Skrip harus melakukan pencadangan untuk menggabungkan beberapa langkah untuk satu pencadangan dan untuk menghindari kesalahan manusia (kesalahan ketik, dll.).
Selain itu, skrip harus melakukan pemulihan untuk menyesuaikan dump ke mesin target, misalnya bahkan konfigurasi mesin asli mungkin telah berubah sejak pencadangan.
Lingkungan adalah server git di mesin Linux dengan sistem file yang mendukung tautan keras.
1. Apa yang dimaksud dengan git repo backup "penuh"?
Sudut pandangnya berbeda tentang apa itu cadangan "100%". Berikut ini dua contoh tipikal.
# 1 Sudut pandang pengembang
Kandungan
Referensi
git adalah alat pengembang dan mendukung sudut pandang ini melalui git clone --mirrordan git bundle --all.
Sudut pandang # 2 Admin
File konten
Kasus khusus "packfile": git menggabungkan dan memadatkan objek ke dalam file paket selama pengumpulan sampah (lihat git gc)
.git / description (untuk hook dan alat, misalnya hook pasca-terima-email, gitolite, GitWeb, dll.)
.git / hooks /
.git / info / (file kecualikan repositori, dll.)
Opsional: Konfigurasi OS (izin sistem file, dll.)
git adalah alat pengembang dan menyerahkannya kepada admin. Cadangan konfigurasi git dan konfigurasi OS harus dilihat sebagai terpisah dari cadangan konten.
2. Teknik
"Cold-Copy"
Hentikan layanan untuk memiliki akses eksklusif ke file-nya. Downtime!
"Hot-Copy"
Layanan menyediakan status tetap untuk tujuan pencadangan. Perubahan yang sedang berlangsung tidak memengaruhi status itu.
3. Topik lain untuk dipikirkan
Kebanyakan dari mereka adalah generik untuk backup.
Apakah ada cukup ruang untuk menyimpan cadangan penuh? Berapa generasi yang akan disimpan?
Apakah pendekatan inkremental diinginkan? Berapa generasi yang akan disimpan dan kapan harus membuat cadangan lengkap lagi?
Bagaimana cara memverifikasi bahwa cadangan tidak rusak setelah pembuatan atau seiring waktu?
Apakah sistem file mendukung tautan keras?
Masukkan cadangan ke dalam satu file arsip atau gunakan struktur direktori?
4. Apa yang disediakan git untuk konten cadangan
git gc --auto
docs: man git-gc
Membersihkan dan memadatkan repositori.
git bundle --all
docs: man git-bundle, man git-rev-list
Atomic = "Hot-Copy"
Bundel adalah file dump dan bisa langsung digunakan dengan git (verifikasi, kloning, dll.).
Maksud utama dari perintah ini adalah untuk membuat cermin aktif penuh, yang secara berkala mengambil pembaruan dari repositori asli.
Mendukung hardlink untuk mirror pada sistem file yang sama untuk menghindari pemborosan ruang.
Dapat diverifikasi melalui git fsck.
Mirror dapat digunakan sebagai dasar untuk skrip cadangan file lengkap.
5. Cold-Copy
Cadangan salinan dingin selalu dapat melakukan pencadangan file lengkap: tolak semua akses ke repo git, lakukan pencadangan, dan izinkan akses lagi.
Masalah yang Mungkin
Mungkin tidak mudah - atau bahkan mungkin - untuk menolak semua akses, misalnya akses bersama melalui sistem file.
Meskipun repo berada di mesin khusus klien dengan satu pengguna, pengguna tersebut masih dapat melakukan sesuatu selama proses pencadangan otomatis :(
Waktu henti mungkin tidak dapat diterima di server dan melakukan pencadangan beberapa repo besar bisa memakan waktu lama.
Ide untuk Mitigasi:
Cegah akses repo langsung melalui sistem file secara umum, meskipun klien menggunakan mesin yang sama.
Untuk akses SSH / HTTP, gunakan pengelola otorisasi git (mis. Gitolite) untuk mengelola akses secara dinamis atau mengubah file otentikasi dengan cara skrip.
Cadangkan repo satu per satu untuk mengurangi waktu henti untuk setiap repo. Tolak satu repo, lakukan pencadangan dan izinkan akses lagi, lalu lanjutkan dengan repo berikutnya.
Memiliki jadwal perawatan yang direncanakan untuk menghindari kesal pengembang.
Cadangan hanya jika repositori telah berubah. Mungkin sangat sulit untuk diterapkan, misalnya daftar objek ditambah dengan file paket dalam pikiran, checksum konfigurasi dan kait, dll.
6. Hot-Copy
Pencadangan file tidak dapat dilakukan dengan repo aktif karena risiko data rusak oleh komitmen yang sedang berlangsung. Salinan panas menyediakan status tetap dari repositori aktif untuk tujuan pencadangan. Komit yang sedang berlangsung tidak memengaruhi salinan itu. Seperti yang tercantum di atas, fungsi klon dan bundel git mendukung hal ini, tetapi untuk cadangan "100% admin" beberapa hal harus dilakukan melalui perintah tambahan.
Cadangan salinan cepat "100% admin"
Opsi 1: gunakan git bundle --alluntuk membuat file dump penuh / inkremental dari konten dan menyalin / mencadangkan file konfigurasi secara terpisah.
Opsi 2: Gunakan git clone --mirror, tangani, dan salin konfigurasi secara terpisah, lalu lakukan backup file penuh dari mirror.
Catatan:
Mirror adalah repositori baru, yang diisi dengan template git saat ini saat pembuatan.
Bersihkan file dan direktori konfigurasi, lalu salin file konfigurasi dari repositori sumber asli.
Skrip cadangan juga dapat menerapkan konfigurasi OS seperti izin file di cermin.
Gunakan sistem file yang mendukung tautan keras dan buat cermin pada sistem file yang sama dengan repositori sumber untuk mendapatkan kecepatan dan mengurangi konsumsi ruang selama pencadangan.
7. Pulihkan
Periksa dan adopsi konfigurasi git ke mesin target dan filosofi "cara kerja" terbaru.
Periksa dan adopsi konfigurasi OS ke mesin target dan filosofi "cara kerja" terbaru.
@VonC Ya, tetapi VonC dapat memiliki beberapa fitur tambahan selama pengemasan ulang, atau dapat menambang struktur internal git repo, yang dapat digunakan untuk beberapa pengoptimalan (restrukturisasi tujuan, atau peningkatan kecepatan, dll).
peterh
3
Jawaban yang benar IMO adalah git clone --mirror . Ini akan mencadangkan repo Anda sepenuhnya.
Git clone mirror akan mengkloning seluruh repositori, catatan, head, refs, dll. Dan biasanya digunakan untuk menyalin seluruh repositori ke server git baru. Ini akan menarik semua cabang dan semuanya, seluruh repositori.
Biasanya kloning repo tidak mencakup semua cabang, hanya Master.
Menyalin folder repo hanya akan "menyalin" cabang yang telah ditarik ... jadi secara default hanya cabang Master atau cabang lain yang telah Anda periksa sebelumnya.
Perintah Git bundle juga bukan yang Anda inginkan: "Perintah bundle akan mengemas semua yang biasanya didorong melalui kabel dengan perintah git push ke dalam file biner yang dapat Anda kirimi email ke seseorang atau dimasukkan ke flash drive, lalu pisahkan ke dalam repositori lain. " (Dari Apa perbedaan antara git clone --mirror dan git clone --bare )
Apakah git clone --mirror membuat backup point-in-time yang konsisten? Apa pengguna mendorong komit selama pencadangan? Apakah ditolak, diantrekan, atau dimasukkan ke dalam cadangan?
Benjamin Goodacre
0
cd /path/to/backupdir/
git clone /path/to/repo
cd /path/to/repo
git remote add backup /path/to/backupdir
git push --set-upstream backup master
ini membuat cadangan dan membuat pengaturan, sehingga Anda dapat melakukan git push untuk memperbarui cadangan Anda, apa yang mungkin ingin Anda lakukan. Pastikan saja, bahwa / path / to / backupdir dan / path / to / repo setidaknya adalah hard drive yang berbeda, jika tidak maka tidak masuk akal untuk melakukan itu.
Saya pikir dia tahu perintah klon dengan baik, jika dia bisa menanyakan pertanyaan seperti itu, dan itu jelas tidak cukup baginya (karena itu adalah klon, dan bukan dump). Dump adalah hal yang berbeda dari salinan sederhana, misalnya: 1) tidak perlu optimal (atau bahkan mampu) untuk pekerjaan normal 2) tetapi dituntut memiliki ketahanan dan repairibilitas yang baik terhadap korupsi data 3) Seringkali berguna jika mereka dengan mudah dapat di-diff untuk cadangan tambahan, sementara itu bukan tujuan pada salinan.
peterh
0
Berikut dua opsi:
Anda dapat langsung mengambil tar dari direktori git repo karena ia memiliki seluruh konten repo yang kosong di server. Ada sedikit kemungkinan bahwa seseorang sedang mengerjakan repo saat mengambil cadangan.
Perintah berikut akan memberi Anda tiruan repo telanjang (seperti yang ada di server), lalu Anda dapat mengambil tar dari lokasi tempat Anda telah mengkloning tanpa masalah apa pun.
git clone --bare {your backup local repo} {new location where you want to clone}
Saya pikir dia tahu perintah klon atau tar dengan baik, jika dia bisa menanyakan pertanyaan seperti itu, dan itu jelas tidak cukup baginya (karena itu adalah klon, dan bukan dump). Dump adalah hal yang berbeda seperti salinan sederhana, misalnya: 1) tidak perlu optimal (atau bahkan mampu) untuk pekerjaan normal 2) tetapi dituntut memiliki ketahanan dan repairibilitas yang baik terhadap korupsi data 3) Seringkali berguna jika mereka dengan mudah dapat di-diff untuk cadangan tambahan, sementara itu bukan tujuan pada salinan.
peterh
3
peterh, Jelas dia tidak meminta perintah tar atau klon. Jika Anda melihat lebih dekat, saya juga tidak menjelaskan perintah itu. Apa yang saya coba jelaskan adalah cadangan Git melalui metode berbeda yang mungkin menyertakan berbagai perintah Linux yang tidak berarti bahwa saya mengajarkan perintah-perintah linux tersebut. Saya mencoba untuk memberikan sedikit ide di sini.
vishal sahasrabuddhe
0
Jika ada di Github, Navigasikan ke bitbucket dan gunakan metode "import repositori" untuk mengimpor repo github Anda sebagai repo pribadi.
Jika ada di bitbucket, Lakukan sebaliknya.
Ini adalah cadangan penuh tetapi tetap di cloud yang merupakan metode ideal saya.
Adakah yang bisa mengkonfirmasi ini? Saya merasa ini adalah pendekatan yang tepat untuk membuat cadangan yang tepat.
Ravindranath Akila
5
Saya pikir Anda bisa berakhir dengan snapshot yang tidak konsisten ketika selama operasi penyalinan perubahan dilakukan / didorong ke repositori. Menggunakan perintah git seperti git clone --bareakan memberi Anda snapshot yang konsisten.
Eelke
1
Setuju dengan Sunil - ini tampaknya tidak atom.
jia103
1
@ jia103 Tidak selalu menjadi masalah jika tidak atomic - Anda hanya perlu tahu, dan harus mampu, untuk menjamin bahwa tidak ada orang lain yang dapat menjangkau repo saat Anda mengerjakannya. Tapi saya pikir OP menginginkan yang spesifik, untuk alat git repos yang dioptimalkan untuk tugas tersebut, salinan file sederhana mungkin terkenal untuknya.
Jawaban:
Ada apa dengan hanya membuat tiruannya?
Setiap repositori adalah cadangan dari remote-nya.
sumber
git branch -a
. Mungkin lebih jelas begini: Setelah mengkloning repositori Anda tidak mengambil setiap cabang, Anda mengambil setiap komit. Cabang hanya merujuk ke komit yang ada.git clone
mencakup semua itu. (1) bersifat opsional, bukan persyaratan. Jika hasilnya masih optimal, itu masih cadangan (2) sudah tercakup oleh git itu sendiri. - Poin yang ingin saya berikan adalah, jikagit clone
sudah mencakup poin-poin yang relevan, untuk apa Anda membutuhkan alat yang berbeda? Meskipun saya juga lebih sukagit bundle
saya tidak berpikir jawaban saya salah, atau tidak valid. Anda dapat melihat kedua pendekatan sebagai hot- vs cold-backup.Saya suka metode itu, karena hanya menghasilkan satu file, lebih mudah untuk disalin.
Lihat ProGit: seikat kecil kegembiraan .
Lihat juga " Bagaimana cara mengirim email ke seseorang tentang repositori git? ", Di mana perintahnya
rinci:
Untuk menggunakan bundel itu, Anda dapat mengkloningnya, dengan menentukan folder yang tidak ada (di luar repo git apa pun):
sumber
git bundle
jawaban yang benar menurut saya, dan bukan yang diterima. Saya pikir dia tahu perintah klon dengan baik, jika dia bisa menanyakan pertanyaan seperti itu, dan itu jelas tidak cukup baginya (karena itu adalah klon, dan bukan dump). Dump adalah hal yang berbeda dari salinan sederhana, misalnya: 1) tidak perlu optimal (atau bahkan mampu) untuk pekerjaan normal 2) tetapi dituntut memiliki ketahanan dan repairibilitas yang baik terhadap korupsi data 3) Seringkali berguna jika mereka dengan mudah dapat di-diff untuk cadangan tambahan, sementara itu bukan tujuan pada salinan.git bundle
ataugit clone
mendapatkan semuanya , misalnya skrip hook.git bundle
repo jarak jauh?Memperluas beberapa jawaban lain, inilah yang saya lakukan:
Siapkan repo:
git clone --mirror user@server:/url-to-repo.git
Kemudian saat Anda ingin menyegarkan cadangan:
git remote update
dari lokasi klon.Ini mencadangkan semua cabang dan tag, termasuk yang baru yang ditambahkan kemudian, meskipun perlu dicatat bahwa cabang yang dihapus tidak terhapus dari klon (yang untuk cadangan mungkin merupakan hal yang baik).
Ini adalah atom sehingga tidak memiliki masalah seperti salinan sederhana.
Lihat http://www.garron.me/en/bits/backup-git-bare-repo.html
sumber
Memperluas jawaban hebat dari KingCrunch dan VonC
Saya menggabungkan keduanya:
Setelah itu Anda memiliki file bernama
reponame.bundle
yang dapat dengan mudah disalin. Anda kemudian dapat membuat repositori git normal baru dari itu menggunakangit clone reponame.bundle reponame
.Perhatikan bahwa
git bundle
hanya salinan komit yang mengarah ke beberapa referensi (cabang atau tag) di repositori. Jadi, komitmen kusut tidak disimpan ke bundel.sumber
git bundle create reponame.bundle --all
?gunakan git bundle, atau clone
menyalin direktori git bukanlah solusi yang baik karena tidak atomic. Jika Anda memiliki repositori besar yang membutuhkan waktu lama untuk menyalin dan seseorang mendorong ke repositori Anda, itu akan memengaruhi pencadangan Anda. Mengkloning atau membuat bundel tidak akan mengalami masalah ini.
sumber
Semuanya ada di dalam
.git
direktori. Cukup cadangkan itu bersama dengan proyek Anda seperti yang Anda lakukan pada file apa pun.sumber
copy
or dengancp
sangat baik dan itu tidak sesuai dengan kebutuhannya. Dan menurut saya, menurutnya repositori kosong (meskipun bisa juga disalin, menurut saya ini bukan cadangan berfitur lengkap).Utas ini sangat membantu untuk mendapatkan beberapa wawasan bagaimana backup repo git dapat dilakukan. Menurut saya masih kurang beberapa petunjuk, informasi atau kesimpulan untuk menemukan "cara yang benar" (tm) bagi diri sendiri. Oleh karena itu berbagi pemikiran saya di sini untuk membantu orang lain dan menempatkan mereka untuk diskusi untuk meningkatkan mereka. Terima kasih.
Jadi, mulailah dengan mengambil pertanyaan asli:
Kemudian memperkayanya dengan keinginan khas dan menentukan beberapa pengaturan awal:
1. Apa yang dimaksud dengan git repo backup "penuh"?
Sudut pandangnya berbeda tentang apa itu cadangan "100%". Berikut ini dua contoh tipikal.
# 1 Sudut pandang pengembang
git adalah alat pengembang dan mendukung sudut pandang ini melalui
git clone --mirror
dangit bundle --all
.Sudut pandang # 2 Admin
git gc
)git adalah alat pengembang dan menyerahkannya kepada admin. Cadangan konfigurasi git dan konfigurasi OS harus dilihat sebagai terpisah dari cadangan konten.
2. Teknik
3. Topik lain untuk dipikirkan
Kebanyakan dari mereka adalah generik untuk backup.
4. Apa yang disediakan git untuk konten cadangan
git gc --auto
git bundle --all
git bundle verify
.git clone --mirror
git fsck
.5. Cold-Copy
Cadangan salinan dingin selalu dapat melakukan pencadangan file lengkap: tolak semua akses ke repo git, lakukan pencadangan, dan izinkan akses lagi.
6. Hot-Copy
Pencadangan file tidak dapat dilakukan dengan repo aktif karena risiko data rusak oleh komitmen yang sedang berlangsung. Salinan panas menyediakan status tetap dari repositori aktif untuk tujuan pencadangan. Komit yang sedang berlangsung tidak memengaruhi salinan itu. Seperti yang tercantum di atas, fungsi klon dan bundel git mendukung hal ini, tetapi untuk cadangan "100% admin" beberapa hal harus dilakukan melalui perintah tambahan.
Cadangan salinan cepat "100% admin"
git bundle --all
untuk membuat file dump penuh / inkremental dari konten dan menyalin / mencadangkan file konfigurasi secara terpisah.git clone --mirror
, tangani, dan salin konfigurasi secara terpisah, lalu lakukan backup file penuh dari mirror.7. Pulihkan
sumber
Anda dapat mencadangkan git repo dengan git-copy dengan ukuran penyimpanan minimum.
Kemudian Anda dapat memulihkan proyek Anda dengan
git clone
sumber
git clone --bare
+ sederhanagit push --force
.Jawaban yang benar IMO adalah git clone --mirror . Ini akan mencadangkan repo Anda sepenuhnya.
Git clone mirror akan mengkloning seluruh repositori, catatan, head, refs, dll. Dan biasanya digunakan untuk menyalin seluruh repositori ke server git baru. Ini akan menarik semua cabang dan semuanya, seluruh repositori.
Biasanya kloning repo tidak mencakup semua cabang, hanya Master.
Menyalin folder repo hanya akan "menyalin" cabang yang telah ditarik ... jadi secara default hanya cabang Master atau cabang lain yang telah Anda periksa sebelumnya.
Perintah Git bundle juga bukan yang Anda inginkan: "Perintah bundle akan mengemas semua yang biasanya didorong melalui kabel dengan perintah git push ke dalam file biner yang dapat Anda kirimi email ke seseorang atau dimasukkan ke flash drive, lalu pisahkan ke dalam repositori lain. " (Dari Apa perbedaan antara git clone --mirror dan git clone --bare )
sumber
ini membuat cadangan dan membuat pengaturan, sehingga Anda dapat melakukan git push untuk memperbarui cadangan Anda, apa yang mungkin ingin Anda lakukan. Pastikan saja, bahwa / path / to / backupdir dan / path / to / repo setidaknya adalah hard drive yang berbeda, jika tidak maka tidak masuk akal untuk melakukan itu.
sumber
Berikut dua opsi:
Anda dapat langsung mengambil tar dari direktori git repo karena ia memiliki seluruh konten repo yang kosong di server. Ada sedikit kemungkinan bahwa seseorang sedang mengerjakan repo saat mengambil cadangan.
Perintah berikut akan memberi Anda tiruan repo telanjang (seperti yang ada di server), lalu Anda dapat mengambil tar dari lokasi tempat Anda telah mengkloning tanpa masalah apa pun.
sumber
Jika ada di Github, Navigasikan ke bitbucket dan gunakan metode "import repositori" untuk mengimpor repo github Anda sebagai repo pribadi.
Jika ada di bitbucket, Lakukan sebaliknya.
Ini adalah cadangan penuh tetapi tetap di cloud yang merupakan metode ideal saya.
sumber
Sejauh yang saya tahu Anda bisa membuat salinan direktori tempat repo Anda berada, itu saja!
sumber
git clone --bare
akan memberi Anda snapshot yang konsisten.