Git log taşınan bir dosyanın geçmişini neden göstermeyebilir ve bu konuda ne yapabilirim?


91

Birkaç dosyayı kullanarak yeniden adlandırdım git mv, kullandım git stash, HEAD'e hızlıca bir göz attım (değiştirmeden) sonra git stash pophepsini geri almak için yaptım . Hareketlerim commit listesinden kayboldu, bu yüzden onları tekrar yaptım ve git'in git rmyeniden adlandırma işleminin bir yeniden adlandırma olduğunu fark ettiği commit mesajı iddia edildi. Bu yüzden artık düşünmedim.

Ama şimdi, işleme sonrası, taşınan dosyaların geçmişine ulaşamıyorum! Git'in söz konusu işleme hakkında söyledikleri:

~/projects% git log --summary
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime

 delete mode 100644 test/R_DebugUI_iOS.h
 delete mode 100644 test/R_DebugUI_iOS.m
 create mode 100644 system/runtime/src/R_DebugUI_iOS.h
 create mode 100644 system/runtime/src/R_DebugUI_iOS.m

 <<snip older commits>>
 ~/projects%

Şimdi bu taşınan dosyalardan birinin geçmişini almaya çalışıyorum, böylece eski bir sürüme bakabilirim, ancak pek yararlı bir şey bulamıyorum:

~/projects/system/runtime/src% git log --follow --find-copies-harder -M -C R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime
~/projects/system/runtime/src% 

(Ayrıca -M, -Cve olmadan da denedim --find-copies-harder, ancak boşuna.)

Geçmişini, eski konumundan silindiği noktada duran eski adıyla alabilirim:

~/projects% git log --summary --follow --find-copies-harder -M -C -- test/R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime

 delete mode 100644 test/R_DebugUI_iOS.m

commit 32a22d53c27e260714f759ecb3d3864e38b2e87f
Author: brone
Date:   Tue Dec 7 23:52:51 2010 +0000

    Can set debug UI's alpha.

<<snip older commits>>
~/projects%

Yani bu sefer tamamen takılıp kalmadım, ama bu tür şeyleri her zaman yapmak zorunda kalmaktan hoşlanmam. (Hayatları boyunca en az bir kez taşınacak makul sayıda dosya olmasını bekliyorum.)

Yanlış bir şey mi yapıyorum? Dosyanın eski kopyası ve yeni kopya% 98,8 aynıdır (166'nın 2 satırı değiştirildi). Anladığım kadarıyla git bu durumda dosyayı izleyebiliyor olmalı, çünkü onları açıkça depolamak yerine yeniden adlandırma işlemlerine neden oluyor ve dosyalar, onları aynı şekilde düşünmesi gerektiğine inandığım kadar benzer.

Bunu düzeltmek için yapabileceğim bir şey var mı?


Tahmin edin: Komutu ~ / projects / system / runtime / src yerine ~ / projects / içinde çalıştırırsanız çalışır mı?
Douglas

Hayır, aynı sonucu alıyorum. (Genel olarak git, herhangi bir klasörde olmana izin verme konusunda oldukça iyi görünüyor ...)

Bu bana bir fikir verdi ve soruyu bulgularımla güncelledim. Yorum için teşekkürler!

mwindows üzerinde "1.7.3.1.msysgit.0" ile birlikte "tortoiseGit 1.5.8.0" kullanıyorum. Explorer'da bir dosyayı yeniden adlandırdığımda + işlediğimde gui'mde "status = Rename" görüyorum. Git hakkında komut satırında bunu nasıl yapacağımı "nasıl yapılır" cevabını verecek kadar bilmiyorum ama tortoiseGit benim için beklediğiniz gibi çalışan bir şey yaptı.
k3b

Yanıtlar:



28

Yeniden adlarımı görüyorum git log -M --summary..


git log -M --summarysadece belirli bir dosyanın geçmişine, yani bir dosya argümanına bakıyorsanız, herhangi bir yeniden adlandırma bilgisi vermez.
vinc17

17

Sorunumu tam olarak çözmemiş olsam bile endişelerimi yatıştırmayı başardığım için kendi sorumu cevaplıyorum. ( git log --followyine de benim için çalışmıyor.)

İlk olarak, --summaryyeniden adlandırma işleminin günlüğü deletedosyanın eski adını içeren satırı içerir . Yani fark edilmesi kolaysa, eski adını ve git logoradan da bulabilirsiniz .

Bu, büyük bir işlemin parçasıysa ve bu nedenle fark edilmesi biraz daha zorsa - ve bu durum endişelerimden biriydi - git blame -Cyeniden adlandırma sonrası revizyonda dosyanın yeni adıyla kullanılabilir. Muhtemelen satırlar orijinal dosyadan kalmıştır! - bu yüzden git, kaynağını bulmalı ve eski dosya adını göstermelidir (ve iyi bir önlem için bir commit karması). Daha sonra izi ile alabilirsiniz git log.

Öyleyse, bir birim olarak dosyanın geçmişine biraz ilgi duyuyorsanız (herhangi bir nedenle), nispeten basit bir şekilde yapılabilir gibi görünüyor. Bana öyle bir izlenim edinmiş olsam da, git düzgün kullanmanı tercih ederdi.


6
Silmek / eklemek yerine yeniden adları göstermek için -M seçeneğine ihtiyacınız olduğunu düşünüyorum
Adrian Cornish

1
Aynı sorunu git log --follow .git log --follow path/to/new/dir
yaşadım

1
--followParametre çalışır, ancak yapmanız gereken:git log --follow -- ./path/to/file
DRUMM

git -log filename.csDosya taşıma işleminde duran sorunla karşılaştım (mevcut dizin dosyanın klasörüne ayarlı). Ancak VS geçmişi penceresi tüm dosya değişiklik günlüğünü gösterir. Ayrıca dosyanın Github masaüstü ile taşındığını görebiliyorum. Ancak git log -10 --follow filename.cshamle kaydetmeden önceki günlüğü de gösterir.
oleksa

12
git log --follow ./path/to/file

Sanırım aradığın bu.


3
Beş yıl öncesinden gelen cevap bu bilgiye sahip.
dotancohen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.