Entah bagaimana ketika saya git init
mengedit proyek terbaru saya sekitar sebulan yang lalu saya menjalankan perintah di direktori satu direktori lebih tinggi dari root proyek saya.
Jadi repositori saya ada di ./project
direktori dan bukan di ./project/my-new-project
direktori. Saya tidak tahu bagaimana saya tidak menyadari masalah ini sebelumnya, tetapi saya tidak pernah mencari direktori .git sampai sekarang.
Adakah cara, tanpa menghentikan proyek saya, untuk memindahkan repositori ke direktori yang benar dan kemudian memberi tahu git apa basis baru dari proyek tersebut? Memindahkan direktori saja tidak akan berhasil. Git mengira semua file telah dihapus.
Saya mengalami masalah sebaliknya - harus menggeser git root ke direktori induk (dari project / src ke project) Yang sangat mengejutkan saya, berikut ini berhasil !!
git dengan cerdik mendeteksi bahwa semua file baru diganti namanya menjadi versi lama dan tidak ada riwayat yang hilang
Anda dapat mencoba sesuatu yang serupa ... pindahkan folder .git dan tambahkan file lagi sebelum melakukannya
sumber
git rm'd
file dari lokasi lama mereka, jadigit status
(dengan benar) akhirnya melaporkan sejumlah operasi ganti nama. Semakin saya bekerja dengan git, semakin saya menyukainya..gitignore
dan menjalankangit add -A
di folder root; setelah ini, git menampilkan semua file dengan benar,renamed
bukandeleted
. 2. Karena saya menggunakan submodul, saya harus pindah.gitmodules
ke root baru, dan memperbarui jalur submodul di berbagai file konfigurasi git. Untuk menemukan file mana yang akan dimodifikasi, saya menjalankangrep -nrI --color 'old/path/to/submodule' .
Ini berhasil untuk saya, dan menjaga semua sejarah saya tetap utuh. Dari folder akar yang salah (induk tempat Anda tidak sengaja menginisialisasi repo):
Pindahkan folder:
Inisialisasi ulang repo git:
Tambahkan kembali semua file, komit, dan dorong:
Selesai! Dapatkan bir untuk dirimu sendiri.
Saat Anda menjalankan repo git setelah menginisialisasi ulang, Anda akan mendapatkan banyak keluaran yang terlihat seperti ini:
Dengan kata lain, semua referensi Anda dari folder induk dan diubah namanya untuk menggunakan folder yang benar.
sumber
git filter-branch
memungkinkan Anda menulis ulang sejarah dengan cara itu. Thegit filter-branch
man page bahkan memiliki kasus Anda sebagai contoh :Anda mungkin ingin
git clone
repo ke subdirektori baru sebelum (atau setelah?)git filter-branch
Dijalankan. (Mengkloning sebelum cabang-filter dan menjalankan cabang-filter pada klon baru akan memiliki keuntungan meninggalkan.git/
dir asli di tempat sebagai cadangan jika terjadi kesalahan.)sumber
.git
repo tetap di tingkat atas sementara subdirektori menjadi "dianggap sebagai root") - ini benar-benar akan membuang semua file lain di repo, dan memindahkan semuasubdirectory/*
file ke folder root .git push --force
untuk mengupdate repositori upstream setelah ini.Git dapat mengingat file dengan hashnya,
Pindahkan saja Anda
.git
ke direktori root dan beri tahugit
untuk mengingat semua file berubah dengan--all
opsi.sumber
Gunakan
git-mv
untuk memindahkan file Anda "ke atas" ke lokasi yang benar, lalugit-rm
ke direktori "proyek-baru-saya".sumber
Saya datang ke sini mencari cara untuk memindahkan repositori saya ke mana saja .
Seandainya, saya bukan satu-satunya, inilah yang pada akhirnya saya lakukan:
https://git.wiki.kernel.org/index.php/GitFaq#How_do_I_clone_a_repository_with_all_remotely_tracked_branches.3F Saya "git clone --mirror" da salinan kosong dari repo saya dan setelah itu menyuruhnya untuk tidak kosong lagi, sehingga file muncul di folder baru itu. (Kemudian periksa apakah file dan log telah muncul atau tidak.) Simpan repo lama untuk sementara, untuk berjaga-jaga ...
Dengan cara itu saya bisa memindahkan repo saya tanpa kehilangan sejarah.
Salam Hormat, Dinah
sumber
mv /path/to/the/old/location/of/the/repo /path/to/the/new/location/of/the/repo
.Baru saja melalui masalah yang sama ini, solusi akhirnya saya adalah:
git reset --hard HEAD
Ini bekerja seperti sihir tanpa berdampak pada sejarah. - NB Jika Anda telah membuat beberapa perubahan, pastikan untuk mengkomitnya sebelum memindahkan direktori .git.
sumber
Ada dua cara di sini:
sumber