Belirli bir yöntem veya işlevde değişiklik gösterebilen bir sürüm kontrol sistemi var mı? [kapalı]


11

Bazen şöyle bir şey söylemek güzel olurdu:

(git|svn|hg|etc) diff Foo.c:main
(git|svn|hg|etc) log log Foo.c:main

son işlemden bu yana kaynak dosyadaki belirli bir işlevde yapılan değişiklikleri veya değişikliklerin tam geçmişini görmek için. Sorum iki katlıdır:

  1. Bunu yapan bir şey var mı?
  2. Böyle bir araç pratik olur mu? İşlevin farklı sürümlerini karşılaştırmak için her revizyonda kodun basit bir şekilde ayrıştırılması gerekir; ek yükün verimli olması için fazla mı olur?

7
Buna olan ihtiyaç, yöntemlerin çok büyük olması veya sınıfların düzgün organize edilmemesi gibi altta yatan bir sorunun belirtisi gibi görünüyor, çünkü tuzuna değer herhangi bir VCS size sınıfın bir farkını verecek ve aşağı kaydırmak yeterince kolay sınıf çok büyük değilse söz konusu yönteme (veya aramaya) ve yöntemdeki kodu tüm sınıf bağlamında görürsünüz. Kısacası, yöntem çözünürlüğünün çok spesifik olduğunu düşünüyorum.
Robert Harvey

@Robert bu iyi bir nokta, ve merak etme motivasyonumun kısmen en azından küçük bir kod şişmesinden kaynaklandığını düşünüyorum. Belirli bir yönteme bir hata izledim ve nerede kırıldığını görmek için sadece bu yöntemde değişikliklerin bir günlüğünü görmek istiyorum ve tam
farklar

4
Bunun yararlı olduğu çok nadir durumlarda TortoiseXXX'in Suçlama özelliği oldukça güçlüdür. Yöntemdeki tüm satırlarda son değişikliklerin ne zaman yapıldığını görebilir ve doğru kenar boşluğunu kullanarak bu değişikliklere geri adım atmaya devam edebilirsiniz.
pdr

Yanıtlar:


14
  1. Bildiğim kadarıyla değil. Biri olabilir, ama eğer yapsaydı üretim kalitesi olmasını beklemezdim.
  2. Bunun pratik olduğunu düşünmüyorum, ancak listelediğiniz nedenden dolayı değil. Bu pratik değildir çünkü VCS'nin bu tür işlevleri desteklemek için dil farkında olması gerekir. Temel olarak, dil metnini (bir derleyicinin yaptığı büyük adımlardan biri) ayrıştırmak için bir şeyler yerleştirmeniz gerekir. Bu, zaten oldukça karmaşık bir iş yapan VCS'ye çok fazla ekstra ağırlık ekler.
    Ama daha da önemlisi, desteklemek istediğiniz her dil için aynı şeyi yapmanız gerekir. Satış noktası sadece C kodunda çalışan bir VCS çok fazla çekiş elde etmez. Tüm belirsiz dilleri görmezden gelseniz bile, en iyi 10 dili desteklemek büyük bir girişim olacaktır.

Ve Robert'ın işaret ettiği gibi, hemen bir yönteme atlayabilmek, diff aracındaki yönteme manuel olarak atlamak zorunda kalmadan büyük bir kazanç değildir.


4
Dil bağımlılığı noktasını ikinci olarak ve çok fazla gereksiz koda
sahipim

1
Aynı argüman, kod vurgu editörlerine karşı da yapılabilir; dil farkında olmalılar ve gerçekten var olmalılar. Belki de getirisi biraz daha yüksektir (codez renkli ekranlar!). Ayrıştırmanın muhtemelen en zor kısım olacağını kabul ediyorum. Yine de, özellikle programı tam olarak ayrıştırmanıza gerek olmadığından, en yaygın dilleri desteklemek o kadar zor olmaz.
11:30

8

svn aslında istediğiniz şeye yakın bir şey yapar.

Komutu kullanabilirsiniz:

svn diff -x -p program.c 

-x -p Değişim setinin üzerine 'C' fonksiyon adı sağlar. ki buna benziyor.

@@ -97,6 +102,8 @@ int function1(int *x)

Filtrelenmez, ancak amacınıza yakın bir şekilde hizmet etmek için grep / search yapabilirsiniz.

Sanırım bu sadece 'C' (veya C / C ++) içindir. Ancak, sanırım, bir talep varsa svn diğer diller için de kullanılabilir yapardı.

VCS gerektiğini oldukça argüman abone değilsiniz DEĞİL bunu. Sonuçta tüm IDE'lerin veya editörlerin (VIM, EMACS gibi) her dile özgü sözdizimi vurgulaması yapmasını ve aynı anda birçok dili desteklemesini istiyoruz. Bu nedenle, VCS'nin bir geliştirici aracı olması, bu işlevselliği de desteklemelidir.

Tabii ki, keşfettiğim sorunuz sayesinde. Daha önce hiç kullanmamıştım.


1

Özelliklere girmeden ... ... ancak Semantic Designs sitesini ve ürün yelpazesini inceleyebilirsiniz. Dile duyarlı , yani daha iyi bir terim bulunmayan bazı araçlar sunarlar .



-1

Bir dosyanın her satırını en son hangi düzeltmenin ve yazarın değiştirdiğini göstermek için:

git blame filename

1
Doğru, ancak Q, bir dosyadaki belirli bir yöntemde değişiklik aramak için bir yol ister. Belirli bir dosyada 100 düzeltme olduğunu ve bunlardan belirli bir işlevde değişiklik içerenleri bulmanız gerektiğini düşünün.
Caleb

Sürüm kontrolü sözdizimi ayrıntılarını bilmiyor ve dosya türlerini de önemsemiyor.
Ghita

-1

ENVY ve STORE bunu yapıyor. Logan Capaldo'nun yukarıda bahsettiği Monicello'da olduğu gibi, bunların da Smalltalk için olması ilginçtir.

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.