Saya relatif baru untuk git, saya menggunakan Subversion sebelumnya.
Saya perhatikan bahwa sebagian besar grafis front-end git dan plugin IDE sepertinya tidak dapat menampilkan sejarah file jika file telah diganti namanya. Saat saya gunakan
git log --follow
pada baris perintah, saya bisa melihat seluruh log di seluruh nama.
Menurut Linus Torvalds , --follow switch adalah "SVN noob", pengguna git yang serius tidak menggunakannya:
--follow adalah total hack, dimaksudkan untuk memuaskan pengguna ex-SVN yang tidak pernah tahu apa-apa tentang hal-hal seperti menjadi orang tua atau grafik revisi yang bagus.
Ini tidak sepenuhnya mendasar, tetapi implementasi "--follow" saat ini benar-benar merupakan hal preprocessing cepat yang melesat ke logika jalan revisi, daripada menjadi sesuatu yang benar-benar integral.
Ini benar-benar dirancang sebagai "SVN noob" pleaser, bukan sebagai "fungsi git nyata". Idenya adalah bahwa Anda akan lolos dari pola pikir (rusak) yang mengubah nama menjadi penting dalam gambaran besar.
Pertanyaan Saya : Bagaimana cara pengguna hardcore git di antara Anda mendapatkan riwayat file saat diubah namanya? Apa cara 'nyata' untuk melakukan ini?
git mv oldfile newfile
tidak menyebabkan perubahan nama direkam sama sekali - itu hanya sama dengan menghapus satu file dan menambahkan yang lain. git hanya berhasil mengganti nama dan salinan dari status pohon di setiap komit setelah fakta./bin/mv oldfile newfile
), tetapi lakukangit add newfile; git rm oldfile
, hasilnya tidak dapat dibedakan dari itugit mv oldfile newfile
.git log --follow
meningkatkan sedikit dengan git 2.9 (Juni 2016): lihat jawaban saya di bawah ini--color-moved
saat Andadiff
.Jawaban:
Saya berpikir bahwa drive umum di balik titik Linus adalah bahwa - dan mengambil ini dengan sedikit garam - pengguna git hardcore tidak pernah peduli tentang sejarah "file". Anda meletakkan konten dalam repositori git karena konten secara keseluruhan memiliki sejarah yang bermakna.
Ganti nama file adalah kasus kecil "konten" yang bergerak di antara jalur. Anda mungkin memiliki fungsi yang bergerak di antara file yang mungkin dilacak pengguna git dengan "pickaxe" secara fungsional (misalnya
log -S
).Perubahan "path" lainnya termasuk menggabungkan dan memisahkan file; git tidak terlalu peduli file mana yang Anda anggap namanya diubah dan mana yang Anda anggap disalin (atau diganti namanya dan dihapus) itu hanya melacak konten lengkap pohon Anda.
git mendorong pemikiran "seluruh pohon" di mana banyak sistem kontrol versi sangat berpusat pada file. Inilah sebabnya mengapa git merujuk pada "jalan" lebih sering daripada mengacu pada "nama file".
sumber
--follow
untuk ini?--follow
menjadi standar. Yang saya maksud adalah ketika saya ingin melihat sejarah kode dalam suatu file, saya benar-benar tidak biasanya peduli apakah file itu diganti namanya atau tidak, saya hanya ingin melihat sejarah kode, terlepas dari perubahan nama. Jadi menurut saya masuk akal untuk--follow
menjadi default karena saya tidak peduli dengan file individual;--follow
membantu saya untuk mengabaikan nama file individual, yang biasanya sangat tidak penting.Saya memiliki masalah yang sama persis dengan yang Anda hadapi. Meskipun saya tidak bisa menjawab, saya yakin Anda dapat membaca email ini yang ditulis Linus pada tahun 2005, itu sangat relevan dan mungkin memberi Anda petunjuk tentang cara menangani masalah ini:
Saya menemukannya direferensikan oleh posting blog ini, yang juga dapat berguna bagi Anda untuk menemukan solusi yang layak:
Tolong, terus beri tahu kami tentang kemajuan Anda dalam hal ini.
sumber
--color-moved
gerakan menuju "sistem pelacakan ideal." Saya sedang bermain dengannya untuk melihatnya melacak garis yang dipindahkan dalam file, tetapi menyadari secara tidak sengaja bahwa itu melacak garis yang dipindahkan di seluruh diff.--follow
bisa salah (misalnya, jika 2 file memiliki konten yang sama, atau jika ada modifikasi selain memindahkan file).Anda akan senang mengetahui bahwa beberapa alat Git UI populer sekarang mendukung ini. Ada puluhan alat Git UI yang tersedia sehingga saya tidak akan mencantumkan semuanya, tapi misalnya:
Info lebih lanjut tentang alat Git UI:
sumber
Catatan: git 2.9 (June2016) akan sedikit meningkatkan sifat "buggy" dari
git log --follow
:Lihat commit ca4e3ca (30 Mar 2016) oleh SZEDER Gábor (
szeder
) .(Digabung oleh Junio C Hamano -
gitster
- dalam komit 26effb8 , 13 Apr 2016)diffcore: memperbaiki urutan iterasi file yang identik selama deteksi nama diubah
(catat inversinya di sini:,
B/file -> A/file
danA/file -> B/file
)sumber
Di Linux, saya telah memverifikasi bahwa SmartGit dan GitEye dapat mengikuti perubahan nama saat mengikuti sejarah file tertentu. Namun, tidak seperti gitk dan GitEye, SmartGit menunjukkan tampilan file dan tampilan repositori yang terpisah (yang berisi struktur direktori tetapi bukan daftar file yang ada di dalamnya)
sumber