2013-07-17 18 views
10

ben ayrı dosyalarda fonksiyonları ve sınıfları ilan etmek tek dosya PHP komut dosyası üstlenmeden ediyorum. Bir kod bloğu bir dosyadan başka bir dosyaya nasıl taşınır, ancak her bir satır için Git geçmişini korur? Koddaki en az git blame kullanım yeteneğini istiyorum. Daha eski sürümlerle karşılaştırmak da yararlı olacaktır.İşlev bildirimini başka bir dosyaya nasıl taşıyabilirim, Git geçmişini korur?

"Eski" geçmişini görüntülemek için kodda ek komutlar veya bayraklar (örneğin, --follow gibi) gerektiren 'geçici çözüm' çözümleriyle ilgilenmediğimi unutmayın; bunun için, geçmişi görüntüleyen kişinin bunu bilmesi gerekir. Dosya özel muamele gerektiriyor. Gerekli meta yazan bir çözüm arıyorum Normal git komutları böyle blame, log, diff ve bu nedenle onlara ek bayrakları veya argümanlar sunmadan 'sadece işe' böyle.

Oldukça fewpostssimilar problems için bir çözüm arayışı okumak, ancak bireysel hatlarda git blame konusunu ele hiçbiri var. Çalışacağını düşündüğüm bir çözüm, copy the file and its entire history olacaktır, daha sonra bununla çalışın. Ancak, bu soru tatmin edici bir cevap olmadan kalır.

+1

'git blame' zaten dosyalar arasında kod satırlarını izlediğine dikkat edin, ancak dosyalar yeniden adlandırılmadıkça, Git'e, hareket etme/kopyalama algılamasını yapmak için ek seçenekler sunmanız gerekir, bunun nedeni belki de pahalı bir işlemdir. –

+0

varsayalım "Stas" kod bloğu yazar ve Git içine denetler, sonra kesip farklı bir dosyaya bloğu yapıştırın. Şimdi 'git blame', bu kod bloğunu yazdığımı gösterecek. Kodu taşımamı sağlayacak bir çözüm arıyorum, ancak Stas'ın bunu yazdığını ve ne zaman olduğunu göstermelidir. – dotancohen

+1

(https://www.kernel.org/pub/software/scm/git/docs/git-blame.html) zaten size aradığınızı yaparsa görmek için size [ 'git blame' belgelerine] okudunuz için? Özellikle –

cevap

5

Uyarı: Bu, rewriting history'un kabul edilebilir olduğunu varsayar. Yeniden yazma tarihinin sonuçlarını bilmedikçe bunu kullanmayın.

geçmişi kullanımını git filter-branch korurken birden fazla dosya içine bir dosya bölmek için:

git filter-branch --tree-filter 'if [ -f original.php ]; then 
    echo part1.php part2.php part3.php | xargs -n 1 cp original.php; fi' HEAD 

Sonra (sadece istenilen fonksiyonlar ve sınıflar bırakarak) her dosyadan istemiyoruz satırları silin ve sonucu işlemek !

+0

Teşekkürler, bu harika bir cevap! sadece şimdi (Ben bir düşük arama sıralamasını veya bir şey vardır sanırım) kadar bağlı belge git kullanım kılavuzu olan – dotancohen

+1

Not, bu konuda bilmiyordum ama çok detaylı ve gerçekten yararlı olacaktır gibi görünüyor. "Teşekkürler!" Ten kaçınmaya çalışıyorum. yorumlar ama bu bağlantının ne kadar önemli olduğunu vurgulamak istiyorum. Git'te bir bütün kitap aldım ve o kitabın hala kitabın sahip olmadığı bazı bilgileri var. – jrh

İlgili konular