Dalam repositori Git, bagaimana cara mengganti nama direktori dengan benar?

655

Saya pikir itu harus bekerja untuk menyalin direktori untuk diubah namanya menjadi direktori baru dengan nama yang diinginkan, dan menghapus direktori lama , dan git add, git commitdan pushsemuanya. Tetapi apakah ini cara terbaik?

qazwsx
sumber
5
Sejauh menyangkut Git, salin dan hapus adalah hal yang sama dengan langkah. Git akan merekam keduanya (salin + hapus) dan (pindahkan) dengan cara yang sama.
Dietrich Epp

Jawaban:

1183

Ganti nama dasar (atau pindah):

git mv <old name> <new name>

Ganti nama sensitif huruf — mis. dari casesensitiveke CaseSensitive- Anda harus menggunakan dua langkah:

git mv casesensitive tmp
git mv tmp CaseSensitive

( Lebih lanjut tentang sensitivitas huruf di Git ... )

... diikuti oleh komit dan tekan akan menjadi cara paling sederhana untuk mengubah nama direktori dalam repo git.

CB Bailey
sumber
231
Tetapi jika Anda ingin mengubah nama dari casesensitivemenjadi CaseSensitive, Anda dapat melakukan ini: git mv casesensitive Tempdan kemudian git mv Temp CaseSensitive
ViliusK
3
Apakah ini menyimpan semua log dan statistik?
orezvani
23
@ViliusK jika Anda berurusan dengan direktori case case dengan cara mudah yang saya temukan git rm -rf --cached path/to/your/directorieskemudian tambahkan kembali dan komit
dtothefp
1
Tetapi mengapa GIT tidak memiliki dukungan yang tepat untuk perubahan nama untuk paket / direktori? Mengapa saya bahkan perlu membuat folder terpisah. Ketika saya mengganti nama paket, jangan anggap itu sebagai perbedaan dan urus pada saat melakukan & push?
Ahmed
1
Terima kasih banyak untuk ini. Bagi saya, saya harus terlebih dahulu mengeksekusi git config core.ignorecase falsedan kemudian menjalankan perintah berturut-turut atau yang lain, untuk bagian kedua saya akan mendapatkan source is emptykesalahan.
Rika
107

Jika Anda menerima kesalahan ini: fatal: mengganti nama 'foldername' gagal: Argumen tidak valid

Coba ini:

git mv foldername tempname && git mv tempname folderName

Jacques Betancourt
sumber
8
Inilah yang saya butuhkan untuk melakukan perubahan-kasus dalam direktori.
cjserio
Token '&&' bukan pemisah pernyataan yang valid dalam versi ini. git versi 2.11.0.windows.
Tim Hardy
@Tim Hardy juga dapat dijalankan sebagai dua perintah terpisah, git mv foldername tempnamedan git mv tempname folderName, yang seharusnya berfungsi pada Windows.
Larkeith
ini tidak bekerja ! hasil akhirnya akan memasukkan folder 'folderName' baru di dalam folder 'tempname'
bertaruh
61

1. Ubah nama folder dari folder lama ke folder baru

git mv oldfolder newfolder

2. Jika folder baru sudah ada di repositori Anda & Anda ingin menimpanya dan menggunakan: - paksa

git mv -f oldfolder newfolder

Jangan lupa untuk menambahkan perubahan ke indeks & komit setelah mengganti nama dengan git mv.

3. Mengganti nama folder nama menjadi folderName jika sistem file tidak sensitif

Mengganti nama sederhana dengan perintah mv normal (bukan git mv) tidak akan dikenali sebagai perubahan berkas dari git. Jika Anda mencobanya dengan perintah 'git mv' seperti pada baris berikut

git mv foldername folderName

Jika Anda menggunakan sistem file case-insensitive, misalnya Anda menggunakan Mac dan Anda tidak mengkonfigurasinya menjadi case-sensitive, Anda akan mengalami pesan kesalahan seperti ini:

fatal: penggantian nama 'foldername' gagal: Argumen tidak valid

Dan inilah yang dapat Anda lakukan untuk membuatnya bekerja: -

git mv foldername tempname && git mv tempname folderName

Ini membagi proses penggantian nama dengan mengubah nama folder pada awalnya menjadi nama pengguna yang sama sekali berbeda. Setelah mengubah nama menjadi nama lipat yang berbeda folder akhirnya dapat diubah namanya menjadi nama folder baru. Setelah git mv itu, sekali lagi, jangan lupa untuk menambahkan dan melakukan perubahan. Meskipun ini mungkin bukan teknik yang indah, itu berfungsi dengan baik. Filesystem masih tidak akan mengenali perubahan huruf, tetapi git tidak karena mengubah nama menjadi nama pengguna baru, dan hanya itu yang kami inginkan :)

akshay_rahar
sumber
9

Anda dapat mengganti nama direktori menggunakan sistem file. Maka Anda bisa melakukannya git rm <old directory>dan git add <new directory>( halaman Bantuan ). Kemudian Anda dapat melakukan dan mendorong.

Git akan mendeteksi bahwa isinya sama dan itu hanya operasi penggantian nama, dan itu akan muncul sebagai entri ganti nama dalam riwayat. Anda dapat memeriksa apakah ini masalahnya sebelum komit menggunakangit status

Oleksi
sumber
12
hei, tapi dengan cara ini, aku akan kehilangan seluruh sejarah komit.
ViliusK
1
Anda dapat mempertahankannya jika Anda menggunakan flag -follow.
Oleksi
Dua perintah, bukan satu, dan harus menambahkan bendera? Apakah ini lebih baik daripada git mv dengan cara apa pun?
antgel
4
@top Tidak, git mv hanyalah alias untuk rm + add. Menggunakan git mv adalah solusi yang lebih baik.
Oleksi
5
@top Perhatikan bahwa Anda masih harus menggunakan - ikuti untuk melihat riwayat apa pun metode yang Anda gunakan untuk memindahkan file.
Oleksi
3

Dari Aplikasi Web, saya pikir Anda tidak bisa, tetapi Anda bisa mengganti nama semua folder di Git Client, itu akan memindahkan file Anda di folder yang diganti nama baru, daripada komit dan mendorong ke repositori jarak jauh.

Saya memiliki masalah yang sangat mirip: Saya harus mengganti nama folder yang berbeda dari huruf besar ke huruf kecil (seperti Abc -> abc), saya telah mengganti nama semua folder dengan nama dummy (seperti 'abc___') dan daripada berkomitmen untuk repositori jarak jauh, setelah bahwa saya mengganti nama semua folder ke nama asli dengan huruf kecil (seperti abc) dan butuh!

Syncro
sumber
0

Saya menyelesaikannya dalam dua langkah. Untuk mengganti nama folder menggunakan perintah mv Anda perlu hak untuk melakukannya, jika Anda tidak memiliki hak Anda dapat mengikuti langkah-langkah ini. Misalkan Anda ingin mengganti nama caseensitive menjadi Caseensitive.

Langkah 1: Ganti nama folder (caseensitive) menjadi sesuatu yang lain dari explorer. mis. Ganti nama caseensitive ke folder1 melakukan perubahan ini.

Langkah 2: Ganti nama folder yang baru bernama ini (folder1) menjadi nama sensitif case yang diharapkan (Caseensitive) misalnya. Ganti nama folder1 menjadi Caseensitive. Lakukan perubahan ini.

Nilesh
sumber
0

Untuk penggantian nama sensitif, git mv somefolder someFoldertelah bekerja untuk saya sebelumnya tetapi tidak hari ini karena beberapa alasan. Jadi sebagai solusi saya membuat folder baru temp, memindahkan semua konten somefoldermenjadi temp, menghapus somefolder, melakukan temp, lalu membuat someFolder, memindahkan semua konten tempke someFolder, menghapus temp, melakukan dan mendorong someFolderdan berhasil! Ditampilkan seperti someFolderdi git.

Ryan Walker
sumber
-16

Cukup ganti nama foldernya. git adalah "pelacak konten", jadi hash SHA1 adalah sama dan git tahu, bahwa Anda menamainya kembali. Satu-satunya hal yang berubah adalah objek pohon.

rm <directory>
git add .
git commit
bitwave
sumber
1
Ini tidak selalu berhasil. Itu pasti tidak bekerja untukku untuk sth. seperti 20% file ...
Tomáš Fejfar