Bagaimana saya bisa mengubah repositori Git 'normal' menjadi yang telanjang?
Perbedaan utama tampaknya adalah:
di repositori Git yang normal, Anda memiliki
.git
folder di dalam repositori yang berisi semua data yang relevan dan semua file lainnya yang merupakan copy pekerjaan Andadi repositori telanjang Git, tidak ada copy yang berfungsi dan folder (sebut saja
repo.git
) berisi data repositori yang sebenarnya
mv repo/.git repo.git; rm -rf repo
&&
sebagai ganti;
jikamv
gagal!Jawaban:
Singkatnya: ganti konten
repo
dengan kontenrepo/.git
, lalu beri tahu repositori bahwa itu sekarang adalah repositori kosong.Untuk melakukan ini, jalankan perintah berikut:
Perhatikan bahwa ini berbeda dengan melakukan a
git clone --bare
ke lokasi baru (lihat di bawah).sumber
core.bare
. Sekarang, setelah googling opsi ini, saya dapat mengkonfirmasinya: kernel.org/pub/software/scm/git-core/docs/git-config.htmlgit clone --bare /path/to/repo
).rm
perintah mungkin perlu* \.[!.]*
bukan*
dalam rangka untuk menghapus dot-file dan dot-direktori.Metode Anda sepertinya akan berhasil; struktur file dari repositori kosong adalah apa yang ada di dalam direktori .git. Tapi saya tidak tahu apakah ada file yang benar-benar berubah, jadi jika itu gagal, Anda bisa melakukannya
Anda mungkin harus melakukannya di direktori lain untuk menghindari konflik nama, dan kemudian Anda bisa memindahkannya kembali ke tempat yang Anda inginkan. Dan Anda mungkin perlu mengubah file konfigurasi untuk menunjuk ke mana pun repo asal Anda berada.
sumber
git clone --bare /path/to/repo.git /path/to/newbarerepo.git
git update-server-info
repo telanjang setelah penciptaan.Saya pikir tautan berikut ini akan sangat membantu
GitFaq: Bagaimana cara membuat repositori non-telanjang yang ada?
sumber
git clone
) memiliki kelemahan yang nosatalian disebutkan di atas.Kecuali Anda secara khusus ingin atau perlu memutar-mutar bit pada sistem file, itu benar-benar sederhana untuk membuat versi telanjang dari repositori non-telanjang (disebutkan dalam beberapa posting lain di sini). Itu bagian dari fungsionalitas inti git:
git clone --bare existing_repo_path bare_repo_path
sumber
Harap pertimbangkan untuk menggunakan
Dari dokumentasi :
sumber
clone
). Apakah saya melewatkan sesuatu? Apakah--mirror
penambahan yang relatif baru?--mirror
itu tersedia dari versi 1.7, jadi sudah cukup lama. Anda dapat memeriksa di siniSaya hanya ingin mendorong repositori di jalur jaringan tetapi git tidak akan membiarkan saya melakukan itu kecuali repositori itu ditandai sebagai telanjang. Yang saya butuhkan adalah mengubah konfigurasi:
Tidak perlu mengutak-atik file kecuali Anda ingin tetap bersih.
sumber
saya sudah membaca jawabannya dan saya sudah melakukan ini:
ini akan meninggalkan konten
repos/.git
sebagai yang telanjangrepos.git
sumber
Inilah yang menurut saya paling aman dan paling sederhana. Tidak ada apa pun di sini yang tidak disebutkan di atas. Saya hanya ingin melihat jawaban yang menunjukkan prosedur langkah demi langkah yang aman. Anda memulai satu folder dari repositori (repo) yang ingin Anda buat kosong. Saya telah mengadopsi konvensi yang tersirat di atas bahwa folder repositori kosong memiliki ekstensi .git.
sumber
Cukup baca
Buku Pro Git: 4.2 Git di Server - Mendapatkan Git di Server
yang melambung ke
Kemudian masukkan my_project.git ke server
Yang terutama adalah, apa jawaban # 42 coba . Shurely seseorang dapat menemukan kembali roda ;-)
sumber
Berikut adalah fungsi BASH kecil yang dapat Anda tambahkan ke .bashrc atau .profile Anda pada sistem berbasis UNIX. Setelah ditambahkan dan shell di-restart atau file dimuat ulang melalui panggilan ke
source ~/.profile
atausource ~/.bashrc
.Setelah dipanggil di dalam direktori yang berisi direktori .git, itu akan membuat perubahan yang sesuai untuk mengubah repositori. Jika tidak ada direktori .git saat dipanggil, pesan FAILURE akan muncul dan tidak ada perubahan sistem file yang akan terjadi.
sumber
Metode yang mengatakan untuk menghapus file dan membuang sekitar dengan memindahkan direktori .git tidak bersih dan tidak menggunakan metode "git" dalam melakukan sesuatu yang seharusnya sederhana. Ini adalah metode terbersih yang saya temukan untuk mengubah repo normal menjadi repo kosong.
Klon pertama / path / ke / normal / repo ke repo telanjang yang disebut repo.git
Selanjutnya hapus asal yang menunjuk ke / path / ke / normal / repo
Akhirnya Anda dapat menghapus repo asli Anda. Anda bisa mengganti nama repo.git menjadi repo pada saat itu, tetapi konvensi standar untuk menandakan repositori git adalah sesuatu.gas, jadi saya pribadi akan membiarkannya begitu.
Setelah Anda melakukan semua itu, Anda dapat mengkloning bare repo baru Anda (yang pada dasarnya menciptakan repo normal, dan juga bagaimana Anda akan mengubahnya dari bare ke normal)
Tentu saja jika Anda memiliki upstream baru, Anda ingin membuat catatan tentang mereka, dan memperbarui repo telanjang Anda untuk memasukkannya. Tetapi sekali lagi, semuanya bisa dilakukan dengan perintah git. Ingat halaman manual adalah teman Anda.
sumber
.git
folder. Sangat mendidik untuk belajar, bagaimana bagian-bagiannya saling bersesuaian.Jika Anda memiliki repositori dengan beberapa cabang checkout lokal / ref / head / * dan beberapa cabang remote remote / origin / * DAN jika Anda ingin mengubahnya menjadi repositori BARE dengan semua cabang di / ref / head / *
Anda dapat melakukan yang berikut untuk menyimpan riwayat.
sumber
Saya menggunakan skrip berikut untuk membaca file teks yang memiliki daftar semua repos SVN saya dan mengonversinya menjadi GIT, dan kemudian menggunakan git clone --bare untuk mengkonversi ke repo telanjang git
list.txt memiliki format
dan users.txt memiliki format
www-data adalah pengguna server web Apache, diperlukan izin untuk mendorong perubahan melalui HTTP
sumber
Berikut adalah definisi dari repositori telanjang dari gitglossary :
Saya tiba di sini karena saya bermain-main dengan "repositori lokal" dan ingin dapat melakukan apa pun yang saya inginkan seolah-olah itu adalah repositori jarak jauh. Saya hanya bermain-main, mencoba belajar tentang git. Saya akan berasumsi bahwa ini adalah situasi bagi siapa pun yang ingin membaca jawaban ini.
Saya akan senang untuk pendapat ahli atau beberapa contoh-counter khusus, namun tampaknya (setelah mencari-cari beberapa kode sumber git yang saya temukan) hanya pergi ke file
.git/config
dan menetapkan atribut inti telanjang menjadi benar , git akan membiarkan Anda melakukan apa pun Anda ingin melakukan repositori dari jarak jauh. Yaitu baris berikut harus ada di.git/config
:(Ini kira-kira apa yang
git config --bool core.bare true
akan dilakukan perintah , yang mungkin direkomendasikan untuk menghadapi situasi yang lebih rumit)Pembenaran saya untuk klaim ini adalah bahwa, dalam kode sumber git, tampaknya ada dua cara berbeda untuk menguji apakah repo kosong atau tidak. Salah satunya adalah dengan memeriksa variabel global
is_bare_repository_cfg
. Ini diatur selama beberapa tahap persiapan eksekusi, dan mencerminkan nilai yang ditemukan dalam.git/config
file. Yang lainnya adalah fungsiis_bare_repository()
. Berikut adalah definisi fungsi ini:Aku sudah tidak memiliki waktu atau keahlian untuk mengatakan ini dengan keyakinan mutlak, tetapi sejauh yang saya tahu jika Anda memiliki
bare
atribut set ketrue
dalam.git/config
, ini harus selalu kembali1
. Fungsi lainnya mungkin untuk situasi berikut:Saya akan bereksperimen dengan itu ketika saya nanti, tetapi ini akan menunjukkan bahwa pengaturan core.bare = true sama dengan menghapus core.bare dari file konfigurasi dan mengatur direktori dengan benar.
Bagaimanapun, pengaturan core.bare = true tentu akan memungkinkan Anda mendorongnya, tapi saya tidak yakin apakah kehadiran file proyek akan menyebabkan beberapa operasi lain menjadi serba salah. Ini menarik dan saya kira instruktif untuk mendorong ke repositori dan melihat apa yang terjadi secara lokal (yaitu menjalankan
git status
dan memahami hasilnya).sumber
Pertama,
backup
repo Anda yang ada:Kedua, jalankan yang berikut:
sumber
Oneliner untuk melakukan semua operasi di atas:
(jangan salahkan saya jika sesuatu meledak dan Anda tidak memiliki cadangan: P)
sumber
Wow, sungguh menakjubkan berapa banyak orang yang ikut serta dalam hal ini, terutama mengingat sepertinya tidak ada seorang pun yang berhenti untuk bertanya mengapa orang ini melakukan apa yang dia lakukan.
Perbedaan HANYA antara repositori telanjang dan non-telanjang adalah bahwa versi non-telanjang memiliki salinan yang berfungsi. Alasan utama Anda memerlukan repo telanjang adalah jika Anda ingin membuatnya tersedia untuk pihak ketiga, Anda tidak dapat benar-benar mengerjakannya secara langsung sehingga pada titik tertentu Anda harus mengkloningnya pada titik mana Anda berada segera kembali ke versi copy pekerjaan biasa.
Yang sedang berkata, untuk mengkonversi ke repo telanjang yang harus Anda lakukan adalah memastikan Anda tidak memiliki komitmen tertunda dan kemudian hanya:
Itu dia, repo telanjang.
sumber
git config core.bare true
juga.git config core.bare true
, seperti dalam jawaban ini .