특정 방법이나 기능에 대한 변경 사항을 보여줄 수있는 버전 관리 시스템이 있습니까? [닫은]


11

때로는 다음과 같이 말할 수있는 것이 좋을 것입니다.

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

마지막 커밋 이후의 소스 파일 내 특정 기능에 대한 변경 사항 또는 전체 변경 내역을 확인합니다. 내 질문은 두 가지입니다.

  1. 이것을하는 무언가가 있습니까?
  2. 그러한 도구가 실용적입니까? 함수의 다른 버전을 비교하기 위해 각 개정판에서 코드의 간단한 구문 분석을 수행해야합니다. 오버 헤드가 너무 효율적일 수 있습니까?

7
소금의 가치가있는 VCS가 클래스의 차이를 줄 수 있기 때문에 메소드가 너무 크거나 클래스가 올바르게 구성되지 않은 것처럼 근본적인 문제의 증상 인 것처럼 보입니다. 아래로 스크롤하기가 쉽습니다. 클래스가 너무 크지 않은 경우 문제의 메소드를 검색 (또는 검색)하고 전체 클래스의 컨텍스트 내에서 메소드의 코드를 볼 수 있습니다. 요컨대, 방법 분석이 너무 구체적이라고 생각합니다.
Robert Harvey

@Robert는 좋은 지적입니다. 궁금해하는 동기는 부분적으로 코드가 약간만 증가했기 때문이라고 생각합니다. 나는 특정 방법에 버그를 추적하고 파산 곳을보고 그냥 방법 변경의 로그를 볼 수 있도록하려면, 전체 차이점은 서둘러 :)에 있다면 통해 검색 할 수 약간 불편할 수 있습니다
jches을

4
이것이 매우 유용한 경우에는 TortoiseXXX의 Blame 기능이 매우 강력합니다. 분석법의 모든 줄이 마지막으로 변경된 시점을 확인할 수 있으며 오른쪽 여백을 사용하여 해당 변경 사항을 계속 반복합니다.
pdr

답변:


14
  1. 내가 아는 한, 그렇지 않습니다. 하나는 가능하지만 생산 품질이 될 것으로 기대하지는 않습니다.
  2. 나는 그것이 실용적이지 않다고 생각하지만, 당신이 열거 한 이유가 아닙니다. VCS는 그런 종류의 기능을 지원하기 위해 언어를 인식해야하기 때문에 실용적이지 않습니다. 기본적으로 언어 텍스트를 구문 분석 할 무언가를 포함해야합니다 (컴파일러가 수행하는 큰 단계 중 하나). 이것은 이미 상당히 복잡한 작업을 수행하는 VCS에 많은 추가 무게를 추가합니다.
    그러나 더 중요한 것은 지원하려는 모든 언어에 대해 동일한 작업을 수행해야한다는 것입니다. C 코드에서만 작동하는 VCS는 많은 관심을 끌지 않을 것입니다. 모호한 언어를 모두 무시하더라도 상위 10 개 언어까지 지원하는 것은 엄청난 일입니다.

Robert가 지적했듯이 메서드로 즉시 점프 할 수 있다는 것은 diff 도구 내에서 메서드로 수동으로 점프하는 것보다 큰 이득이 아닙니다.


4
나는 두 번째 언어 의존성의 포인트와 중복 코드를 많이 가지고
챈더 Shivdasani

1
코드 하이라이팅 편집기에 대해서도 같은 주장을 할 수 있습니다. 언어를 인식해야하며 실제로 존재해야합니다. 어쩌면 지불금이 조금 더 높을 수도 있습니다 (다채로운 코덱 스크린!). 나는 파싱이 아마도 가장 어려운 부분이라는 데 동의한다. 가장 일반적인 언어를 지원하는 것은 어렵지 않습니다. 특히 프로그램을 완전히 파싱 할 필요가 없기 때문입니다.
jches

8

svn은 실제로 원하는 것에 가까운 것을 수행합니다.

다음 명령을 사용할 수 있습니다.

svn diff -x -p program.c 

-x -p 변경 세트의 상단에 'C'함수 이름을 제공합니다. 이것처럼 보입니다.

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

필터링하지는 않지만 목적을 달성하기 위해 grep / search를 수행 할 수 있습니다.

나는 이것이 'C'(또는 C / C ++) 전용이라고 생각합니다. 그러나 수요가 있다면 svn은 다른 언어에서도 사용할 수 있다고 생각합니다.

VCS는 것을 나는 확실히 인수에 가입하지 않은 NOT 그렇게. 결국 우리는 모든 IDE 또는 편집기 (VIM, EMACS와 같은)가 각 언어에 고유 한 구문 강조를 수행하고 동시에 많은 것을 지원하기를 원합니다. 따라서 VCS는 개발자 도구이므로 이러한 기능을 지원해야합니다.

물론, 내가 발견 한 귀하의 질문에 감사드립니다. 나는 전에 그것을 사용한 적이 없다.


1

세부 사항에 들어 가지 않고 ...하지만 Semantic Designs 사이트 및 해당 제품 범위를 확인할 수 있습니다 . 즉, 언어에 민감한 도구를 제공 하므로 더 나은 용어가 부족합니다.



-1

파일의 각 행을 마지막으로 수정 한 개정 및 작성자를 표시하려면 다음을 수행하십시오.

git blame filename

1
맞습니다. 그러나 Q는 파일 내에서 특정 메소드의 변경 사항을 검색 할 방법을 요청합니다. 주어진 파일에 100 개의 수정본이 있고 특정 기능에 대한 변경 사항이 포함 된 파일을 찾아야한다고 상상해보십시오.
Caleb

버전 제어는 구문 세부 사항에 대해 알지 못하며 파일 유형도 상관하지 않습니다.
Ghita

-1

ENVYStORE는 모두 그렇게합니다. Logan Capaldo가 위에서 언급 한 Monicello와 마찬가지로 이것도 스몰 토크를위한 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.