2010-10-08 19 views
19

Bir dosyanın bir işlevini alıp diğerine yerleştirmek istiyorum, ancak suçlama geçmişini saklı tutuyorum.Dosya ayrılırken git geçmişine dikkat edin

cp a.php b.php 

vim b.php 
# delete everything but 1 function 

vim a.php 
# delete the 1 function 

git add a.php b.php 
git commit 

Ama git blame b.php çalıştırırsanız Ben sadece işlemek bu yeniye suçlayarak bkz.

cevap

4

Belki de bu önceki SO soru bilgilendirici olabilir:

How does git track source code moved between files?

kabul cevabı aktaracak olursak: esasen, Git aslında "store" kod taşındı değildir; taşınan kod için suçlamalar gibi şeyler üretirken, bu işlem tamamlanmadan taahhüt edilen tüm depo durumunu inceleyerek ex post facto yapılır.

+0

Bu cevap "hayır" ama gerçekten bu bir var gibi geliyor "bazen". Sil, Git'in başka dosya doğum tarihlerinin ötesinde bir dosyaya bakmak için tetikleyiciyi tetikler. Tek bir işlevi bölmek ancak bir dosyanın geri kalanını OP olarak tutmak işe yaramadı. Ama sadece bir dosyayı ikiye böldüm, orijinali silip iki yeni isim verdim ve suçlama her iki yeni dosyada doğru bir şekilde atanmış. – Potatoswatter

+0

Woops, bu sadece düzenleme yapıldıktan sonra yapıldı. İşledikten sonra, yeni dosyalardan birinin suçunu açıkça kaybetti. Hala belki bir belki? – Potatoswatter

5

suçlama geçmişini korumak için genel kural düzenlemeler de ilk önce taahhüt ayrı hamle yapmaktır git blame -C -C b.php

+0

Tarihin aslında eski taahhütlere suçlanmasını istiyorum. Git-svn kullanıyoruz, böylece diğerleri svn'de olacak. –

+0

Çok kötü. SVN bunu desteklemiyor! – Arafangion

+0

super helpful, tx .. 'git log' için henüz bir çözüm bulamadı – ptim

13

deneyin. Bu, git blame'un -C seçeneğine ihtiyaç duymadan çalışmasına izin verdiği deneyimlerim oldu.

  1. orijinal
  2. ekstra bölümleri kaldırın silmek için emin olun, yeni hedeflere orijinal Çift: Yani yeni dosyalar halinde dosyayı bölme durumunda, bu iki hareketin kaydedilmesini yapılabilir çoğaltılamaz dosyalar sağlanan örnekte

bu olacaktır:

cp a.php b.php 
mv a.php c.php 
git add a.php b.php c.php 
git commit 
vim b.php # delete everything but 1 function 
vim c.php # delete the 1 function 
git add b.php c.php 
git commit 
+0

Var olmayan bir dosyada' git add 'davranışı Git 1.9 civarında değişti. Kaldırılan dosyaları yansıtmak için 'git rm' veya' git add -A' öğesine ihtiyacınız vardır. –

+0

@DamianYerrick adlı yorum için teşekkürler. Gerçi, sahne için kesin dosyaları belirttiğinizde bunun iki şekilde önemi olduğuna inanmıyorum. (Değişiklik, git 2.0'dan itibaren, "git ekleyin", "ile aynıdır; [release notes] (https: //git.kernel. org/cgit/git/git.git/düz/Belgeler/RelNotes/2.0.0.txt)). – vine77

İlgili konular