버전 제어 커밋 히스토리 유지 및 리팩토링 및 문서화


11

버전 관리 시스템에서 유지 관리하는 커밋 기록을 사용하는 데 드는 비용은 거의 없습니다. 그러나 주요 프로젝트 리팩토링 (또는 재구성 / 정리) 노력 중에는 함수와 클래스 및 네임 스페이스가 이동합니다. 때때로 여러 파일이 병합되고 다른 파일이 분할됩니다. 이러한 변경으로 인해 일부 파일의 원래 커밋 기록이 손실 될 수 있습니다.

제 개인적으로는 프로젝트 구성을 유지하는 것이 소스 코드 기록을 유지하는 것보다 중요합니다. 좋은 프로젝트 구성을 통해 합리적인 노력으로 새로운 기능을 지속적으로 추가 할 수 있으며 소스 코드 히스토리의 가치는 모호한 것으로 보입니다.

또한 단위 테스트를 사용하여 회귀 문제를 신속하게 식별 할 수 있습니다. 최신 버전이 모든 소프트웨어 요구 사항을 계속 충족하는 한 실제로 소스 코드의 기록을 보존해야합니까?

고객은 주요 버전 업그레이드를 수행 할 필요없이 고객에게 지원을 제공 할 필요가 있기 때문에 제공된 소스 코드를 보존해야 한다는 것을 이해합니다 . 그러나이 외에도 소스 코드 커밋의 이력을 유지하는 데 어떤 가치가 있습니까?

소스 코드 커밋 히스토리가 팀 구성원 간의 커뮤니케이션에서 어떤 역할을합니까? 커밋 히스토리를 폐지하는 대신 통신을 위해 "소스 코드"+ "단위 테스트 코드"에 의존한다면 어떨까요?

커밋 히스토리가 존재하면 주요 설계 / 요구 사항 변경 및 이러한 변경을 유발 한 사고의 흐름과 같은 프로젝트에 대한 중요한 정보의 장기 문서화에 만족 하는가?


3
어떤 소스 코드 시스템을 사용 하느냐에 따라 파일 히스토리 및 기타 정보가 있더라도 버전 기록이 보존됩니다. 삭제 된 파일의 히스토리에도 여전히 액세스 할 수 있어야합니다. 그리고 마지막으로 중요한 것은 최종 결과의 역사입니다. 클래스 X는 클래스 Y와 Z의 조합 일 수 있지만 기록에 따르면 (특히 체크인 주석이있는 경우) 원본을 다시 추적 할 수 있습니다. 여기에 뭔가 빠졌습니까?
Adam Lear

1
These changes often lead to the loss of the original commit history of a few files.예를 들어 "git blame"을 보라-아무것도 잃어 버리지 않는다. 때로는 찾기가 조금 어려울 수 있지만 항상 있습니다.
maaartinus

1
대규모 리팩토링에서는 소스 제어 업데이트를 생각하고 계획하는 데 약간의 시간이 걸립니다. 최소한의 추가 노력으로 더 많은 정보를 보존 할 수 있습니다. 예를 들어, 파일을 3 조각으로 분할 한 경우 먼저 원본을 3 개의 대체물로 복사 한 사본을 보존하십시오. 다음 더 커밋 세 ... 수정
UuDdLrLrSs

답변:


5

"변경 내용"또는 "수정 된 버그"유형 설명에 커밋 기록을 사용하려면 이슈 추적 시스템과 연결해야합니다. 모든 변경, 모든 커밋마다 관련된 문제가 있어야 변경 내용, 대상 및 이유를 알 수 있습니다.

최신 버전이 모든 소프트웨어 요구 사항을 계속 충족하는 한 실제로 소스 코드의 기록을 보존해야합니까?

충분히 복잡한 소프트웨어는 여러 가지 이유로 모든 요구 사항이 구현되고 모든 버그가 수정되는 경우가 거의 없으므로 여기서는 귀하의 주장이 낙관적이라고 생각합니다.

프로그램의 버전 7.8에 있다고 가정하십시오. 그러나 현장에서는 1.6, 2.2, 2.8 등과 같은 12 가지 활성 버전을 지원하고 있습니다. 각각의 경우 다양한 이유로 최신 버전으로 업그레이드되지 않으므로 버그 수정을 모두 지원합니다. 고객이 최신 7.8 릴리스에서 버그를 발견했습니다. 7.8에서 수정했습니다. 다른 릴리스 중 몇 개를 수정해야하는지 어떻게 알 수 있습니까? 소스 히스토리와 이슈 트래킹 없이는 그렇지 않습니다.


7

소스 코드 히스토리의 가치는 모호한 것으로 보입니다.

엔지니어들이 몇 년 동안 소스 코드 로 돌아가서 왜 그런지에 대한 답을 찾도록했습니다. 때때로 버그를 이해하기 위해서는 시간이 지남에 따라 상황이 진화 한 방식이 중요하지만, 문서를 문서화 할 때 일반적으로 생각되는 것은 아닙니다 (필수적으로 문서화 할 수도 없음).

또한, 소스 코드 히스토리를 유지해야하는 매우 합법적 인 이유가있을 수 있습니다. 내가해야했던 대부분의 소스 코드 쓰레기 수거통 (빌드 / SCM 엔지니어)은 회사의 법무 부서의 요청을 받았습니다.


1
개인적으로 나는 역사를 전혀 보는 것이 드물지만, 필요한 경우에는 그렇게 할 수있는 능력이 매우 중요하다는 것을 알았습니다. 그래서 나는 그것이 가능할 때 역사 보존을 선호합니다.
UuDdLrLrSs

3

최신 버전이 모든 소프트웨어 요구 사항을 계속 충족하는 한 실제로 소스 코드의 기록을 보존해야합니까?

그러나이 외에도 소스 코드 커밋의 이력을 유지하는 데 어떤 가치가 있습니까?

둘 다 그렇습니다. 언제, 누가, 왜 무언가가 바뀌 었는지 아는 것이 도움이 될 수 있습니다. 당신의 역사를 잃어 버리면, 당신의 능력이 영향을받습니다.

소스 코드 커밋 히스토리가 팀 구성원 간의 커뮤니케이션에서 어떤 역할을합니까? 커밋 히스토리를 폐지하는 대신 통신을 위해 "소스 코드"+ "단위 테스트 코드"에 의존한다면 어떨까요?

그렇습니다. "소스 코드"+ "단위 테스트 코드"접근 방식만으로는 누가 / 언제 / 이유를 알 수 없습니다.

커밋 히스토리가 존재하면 주요 설계 / 요구 사항 변경 및 이러한 변경을 유발 한 사고의 흐름과 같은 프로젝트에 대한 중요한 정보의 장기 문서화에 만족 하는가?

나는 당신이 그렇게 말할 수 있다고 생각합니다. 그러나 요구 사항 / 디자인의 변경 사항을 철저하게 문서화 한 개발자는 거의 없습니다. 그리고 초기 개발이나 그 이후의 수정을 이끈 사고의 흐름을 기록한 사람은 거의 없습니다. 커밋 히스토리 (특히 커밋 로그 메시지)와 이슈 / 버그 추적 시스템에 대한 크로스 링크는 최소한 무언가를 제공합니다. 그리고 그것은 아무것도 아닌, 또는 일련의 릴리스 스냅 샷보다 낫습니다.


1
+1 또한, 통신을 위해 코드에 의존한다는 것은 이력에있는 정보도 주석에 존재하여 DRY를 위반한다는 것을 의미합니다.
Larry Coleman

1
@Larry-맞습니다. 그러나 실제로 문제는 너무 많은 (또는 복제 된) 정보가 아니라 너무 적은 정보가 기록 될 가능성이 높습니다.
Stephen C
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.