2015-04-23 19 views
6

Git, bazı dosyaların yeniden adlandırıldığını belirlemek için hangi algoritma kullanır? git status önce sadece birkaç dakika üretilen neyiGit, dosyanın yeniden adlandırıldığını nasıl biliyor?

budur: sarı kutu ile işaretlenmiş

enter image description here

Bilgiler yanlış olduğunu. Aslında böyle bir yeniden adlandırma yoktu. Dosyalar views/file/create.php ve views/file/index.php, tamamen yeni bir iki dosya kümesinden sonra yarım saat silindi - views/logo/create.php ve views/logo/index.php oluşturuldu.

iki dosya setleri oldukça benzer (Git kadar) gibi görünebilir, ama aslında kalır - bu aynı değildir, dosyaları değiştirildi. Bu, ilk dosya kümesini silmeden önce yarım saat kadar farklı dizinde oluşturulmuş eksiksiz bir yeni dosya kümesidir.

Git tarafından sağlanan bilgiler yanlış olduğu için, merakımı beslemek isterim ve bu yüzden soruyorum. Wikipedia itibaren

+0

Ben osculus katılıyorum ve sadece benzerlik tespitinde kullanılan algoritmalar içine biraz daha detaya girilmeden [bu] (http://fabiensanglard.net/git_code_review/diff.php) makalesine eklemek istiyorum. – wonderb0lt

+1

Güzel! Bir soru üzerine dört upvotes ve 1 yıldız sadece 2-3 dakika içinde, bu mükemmel bir dupe! :> Ben sadece SE topluluğunu seviyorum. Ve ... oops ...o dupe'nin yazarı olduğu için üzgünüm, ama Google'ım soğuk kahve ile doluydu! – trejder

cevap

6

:

Renames değil, gizli bir açık daha işlenir. CVS ile ortak bir şikayeti, düzeltme geçmişini tanımlamak için bir dosyanın adını kullanmasıdır. Bu nedenle, bir dosyayı taşımak ya da yeniden adlandırmak tarihini kesintiye uğratmadan ya da geçmişi yeniden adlandırıp tarihin yanlış olmasını sağlar. Çoğu post-CVS revizyon kontrol sistemleri , bir dosyaya, yeniden adlandırmadan kurtulan benzersiz bir uzun ömürlü ad (bir çeşit inode numarası) vererek çözer. Git böyle bir tanımlayıcısını kaydetmez ve bu bir avantaj olarak kabul edilir. [34] [35] Kaynak kodu dosyaları bazen yalnızca yeniden adlandırılmış veya birleştirilmiştir, [36] ve bunu kaydetme basit bir yeniden adlandırma olarak yanlış bir (immutable) geçmişinde ne olduğunu açıklar. Git, anlık görüntüyü yaparken kaydedilmekten ziyade, anlık görüntülerin geçmişine göz atarak, numaralı hatayı adreslerine kaydeder. [37] (Kısaca, numaralı dosyada, revizyon N'de bir dosyaya ait bir dosya N − 1, varsayılan atadır. Ancak, revizyon N − 1'de benzeri bir dosya bulunmadığında, Git bir yalnızca revizyon N − 1'de bulunan ve yeni dosyaya çok benzeyen dosya.) Ancak, tarihin her gözden geçirildiğinde daha fazla CPU yoğun çalışması ve sezgisel ayarları ayarlamak için numaralı bir seçenek gerekir. Bu mekanizma her zaman çalışmaz; Bazen, aynı işlemdeki değişiklikleriyle yeniden adlandırılan bir dosya, eski dosyanın silinmesi ve yeni bir dosyanın oluşturulması olarak okunur. Geliştiriciler, bu sınırlamayı yeniden adlandırarak çalışabilir ve ayrı olarak değiştirebilir.

İlgili konular