Dari apa yang saya mengerti, Git tidak benar-benar perlu melacak operasi rename / move / copy file , jadi apa tujuan sebenarnya dari git mv ? Halaman manual tidak secara khusus deskriptif ...
Apakah sudah usang? Apakah ini perintah internal, tidak dimaksudkan untuk digunakan oleh pengguna biasa?
mv oldname newname; git add newname; git rm oldname
, itu juga salah untukgit mv oldname newname
(lihat jawaban ini ).git mv
sedikit berbeda darimv oldname newname; git add newname; git rm oldname
, dalam hal itu jika Anda membuat perubahan pada file sebelumgit mv
itu, perubahan itu tidak akan dipentaskan sampai Andagit add
file baru.Dari GitFaq resmi :
sumber
git mv
dan pendekatan manual? Tidak jelas darigit help mv
.Git hanya mencoba menebak untuk Anda apa yang Anda coba lakukan. Itu membuat setiap upaya untuk melestarikan sejarah yang tak terputus. Tentu saja itu tidak sempurna. Begitu
git mv
memungkinkan Anda untuk eksplisit dengan niat Anda dan menghindari beberapa kesalahan.Pertimbangkan contoh ini. Dimulai dengan repo kosong,
Hasil:
Deteksi otomatis gagal :( Atau berhasil?
lalu
Sekarang coba sebagai gantinya (jangan lupa untuk menghapus
.git
folder saat bereksperimen):Sejauh ini baik:
Sekarang, tidak ada yang sempurna:
Betulkah? Tapi tentu saja...
... dan hasilnya sama seperti di atas: hanya
--follow
menampilkan riwayat lengkap.Sekarang, berhati-hatilah dengan penggantian nama, karena opsi mana pun masih dapat menghasilkan efek aneh . Contoh:
Bandingkan dengan:
Hasil:
Ups ... Sekarang histori akan kembali ke inisial alih - alih inisial b , yang salah. Jadi ketika kami melakukan dua gerakan sekaligus, Git menjadi bingung dan tidak melacak perubahan dengan benar. Ngomong-ngomong, dalam percobaan saya hal yang sama terjadi ketika saya menghapus / membuat file alih-alih menggunakan
git mv
. Lanjutkan dengan hati-hati; Anda sudah diperingatkan ...sumber
Seperti yang dikatakan @Charles,
git mv
adalah singkatan.Pertanyaan sebenarnya di sini adalah "Sistem kontrol versi lain (mis. Subversion dan Perforce) memperlakukan nama file secara khusus. Mengapa tidak Git?"
Linus menjelaskan di http://permalink.gmane.org/gmane.comp.version-control.git/217 dengan kebijaksanaan khas:
sumber
Ada kegunaan lain yang saya miliki
git mv
tidak disebutkan di atas.Sejak ditemukan
git add -p
(mode tambalan git add; lihat http://git-scm.com/docs/git-add ), saya suka menggunakannya untuk meninjau perubahan saat saya menambahkannya ke indeks. Dengan demikian alur kerja saya menjadi (1) bekerja pada kode, (2) meninjau dan menambah indeks, (3) komit.Bagaimana cara
git mv
cocok? Jika memindahkan file secara langsung kemudian menggunakangit rm
dangit add
, semua perubahan ditambahkan ke indeks, dan menggunakan git diff untuk melihat perubahan tidak mudah (sebelum melakukan). Menggunakangit mv
, bagaimanapun, menambahkan jalan baru ke indeks tapi tidak berubah dibuat untuk file, sehingga memungkinkangit diff
dangit add -p
bekerja seperti biasa.sumber
Ada kasus khusus di mana
git mv
tetap sangat berguna: ketika Anda ingin mengubah casing nama file pada sistem file case-insensitive. Baik APFS (mac) dan NTFS (windows), secara default, case-insensitive (tetapi case-preserving).greg.kindel menyebutkan ini dalam komentar atas jawaban CB Bailey.
Misalkan Anda bekerja pada mac dan memiliki file yang
Mytest.txt
dikelola oleh git. Anda ingin mengubah nama file menjadiMyTest.txt
.Kamu bisa mencoba:
Oh sayang. Git tidak mengakui bahwa ada perubahan pada file tersebut.
Anda dapat mengatasinya dengan mengubah nama file sepenuhnya kemudian mengubah nama kembali:
Hore!
Atau Anda bisa menyelamatkan diri dari semua gangguan dengan menggunakan
git mv
:sumber