실제로 BIG 소스 코드 커밋의 용어는 무엇입니까? [닫은]


37

때때로 우리는 소프트웨어의 커밋 히스토리를 확인할 때 실제로 큰 커밋이 몇 개 있다는 것을 알 수 있습니다. 소스 코드 라인 (델타)이 수백 가지로 변경되어 10 개 또는 20 개의 파일이 변경 될 수 있습니다. BIG 커밋에 일반적으로 사용되는 용어가 있지만 그 용어가 무엇인지 정확하게 기억할 수는 없습니다. 누구든지 나를 도울 수 있습니까? 프로그래머가 일반적으로 그러한 큰 커밋과 거대한 커밋을 나타내는 용어는 무엇입니까?

BTW, 많은 변화를 함께 실천하는 것이 좋은 습관입니까?

업데이트 : 영감 토론에 감사합니다! 하지만 "코드 폭탄"은 내가 찾고있는 용어라고 생각합니다.


15
"속보". :-)
— Peter K.

3
개인적으로 나는 크기가 커밋이라고 부를 것입니다cluster f...
— Ramhound

1
상사는 항상 이렇게합니다. 체크인 의견 : "everything; o)"
— MetalMikester 2018 년

나는 지금까지 모든 대답을 사랑하고 적어도 내 경력에서 적어도 한 번은 죄를 저지르고 다른 사람들이 그렇게하지 않기를 원했기 때문에 질문에 +1합니다.
— Patrick Hughes

코드 눈사태라고 말할 수도 있습니다!
— Brian

답변:


50

(1) Ben Collins-Sussman : "..." code bombs "즉, 누군가가 몇 달이 걸리는 거대한 새로운 기능을 갖춘 오픈 소스 프로젝트를 보게되면 어떻게해야합니까? 수천 줄의 코드? ... "

(2) Dan Fabulich : "코드 폭탄, 또는 : 큰 아이디어를 가진 초보자 ... 코드 폭탄 은 너무 커서 아무도 그것을 검토 할 수 없습니다."

(3) Google Summer of Code : 가이드 라인 : "일찍 커밋, 자주 커밋 ... 하루 종일 일하지 말고 모든 코드를 하나의 코드 폭탄으로 밀어 내십시오 . 대신 모든 커밋이 하나의 작업에만 포함되어야합니다. "로그 메시지에 요약되어야합니다."

(4) Jeff Atwood : "코드 폭탄 ... 규칙 # 30 : 어둡게 가지 마십시오 . ...


링크 2와 4는 링크 1과 링크 1을 직접 연결하고 인용합니다. 나는 그 용어가 마음에 들지만 그렇게 많이 들리지 않는 것 같습니다.
— haylem

1
커밋 된 코드가 나머지 프로젝트와 완전히 분리 된 새 코드 인 경우 어떻게됩니까? 이 경우, (거의) 완성되고 정리 된 코드를 한 번만 커밋하면 많은 작은 커밋보다 사람들이 (1) 중간 버그 수정, (2) 클래스 이름 변경과 같은 리팩토링, 3) 결국 삭제 될 예비 코드. 그냥 내 2 센트.
— 조르지오

이것은 내가 역사는 리베이스 / 재 작성에있어 이유의 종류
— dukeofgaming

@Giorgio-그것이 가지를위한 것입니다.
— Brian

@ 브라이언 : 네, 가능합니다. 이 경우 브랜치에서 개발 한 기능을 병합 할 때 기본 브랜치에서 커밋이 커집니다.
— Giorgio

38

우리는 아마 그것을 나쁜 커밋 이라고 부릅니다 . :)

나쁜 연습

그리고 네, 그것은 일반적으로 나쁜 습관으로 간주됩니다 .

  • 그것을 만들기 검토하기 어렵다 ,
  • 그것을 만들기 어려운이의 원래 의도를 저지 쉽고 빠르게 파악 ,
  • 그것을 만들기 어려운 명시 적 수정에 코드를 영향을 방법을 참조하거나 문제를 해결하기 위해 ,
  • 그것을 만들기 (가)의 크기가 노이즈에 의한 커밋 경우 어려운 알고 다른 관련되지 않은 변경 사항 (예를 들면 작은 정리 또는 다른 작업)은 함께 보내지 OT.

허용되는 경우

그러나 큰 커밋이 완벽하게 허용되는 경우가 있습니다 . 예를 들어 :

  • 때 나뭇 가지에 걸쳐 통합 ,
  • 버전이없는 다른 코드베이스에서 새 소스 를 추가 할 때
  • 큰 기능을 제자리에 교체 할 때 (변경의 다른 부분을 다루는 작은 커밋으로 분기에서 수행해야하지만 전체를 다시 병합하므로 점진적 인 개발에 대한 더 나은 창을 가질 수 있습니다 기능 및 문제가 발생할 수 있음),
  • 많은 자손 클래스와 소비자 클래스에 영향을주는 API를 리팩토링 할 때

따라서 가능하면 "외과 적 공격"유형의 커밋을 선호합니다 (문제 추적기의 작업 ID에 연결)! 정당한 이유가 있다면 계속 진행하십시오.


그 외에도, 나는 실제로 알지 못하고 커밋에 대한 특별한 이름을 들었다고 생각하지 않습니다. 몬스터 커밋? 뚱뚱한 커밋?

업데이트 : David Cary의 답변은 "코드 폭탄" 이라는 용어 (가장 중요한 것은 Subversion의 최초 제작자 인 Collins-Sussman)를 사용하여 주목할만한 IT 행위자와 연결되어 있습니다. 그렇게 (지금까지 나는 자주 들었다고 말할 수는 없다).


11
고질라 커밋! 으악 !!!
— Péter Török 2016 년

@ PeterTörök : 좋아합니다. 트렌드로 삼자. 다른 옵션 : 고래 커밋, Gargantuan 커밋 또는 아주 간단히 BigFatCommit.
— haylem

1
예, "나쁜"또는 "늦은" 회사에 이름이 없으면 해당 개발자의 이름을 따서 지정하십시오. "이봐, 새로운 사람, 제리 하지마! 커밋하고 자주 커밋."
— chooban

Jerry를하지 마십시오. 유용한 방법입니다! 또한 대량 커밋은 버전 관리 사용을 믿지 않거나 이해하지 못하는 스트레스가 많은 개발자로부터 얻을 수 있습니다. 지식을 확인하십시오!
— 독립

누군가의 이름이 Jerry라면?
— Loïc Faure-Lacroix

12

BTW, 많은 변화를 함께 실천하는 것이 좋은 습관입니까?

글쎄, 오랫동안 변경 사항을 유지하고 다양한 기능과 버그 수정을 구현 한 다음 커밋하는 것이 좋습니다. 이는 큰 커밋이 발생할 수있는 한 가지 방법입니다.

이것이 일어날 수있는 또 다른 방법은 리팩토링이 널리 사용되는 기능의 서명을 변경 한 다음 모든 기능을 변경해야하는 경우입니다. 이것은 반드시 나쁘지는 않으며 개발자가 일부 임계 값을 초과 할까봐 코드 정리를 자제하기를 원하지 않습니다.

따라서 커밋에서 터치 된 파일 수를 보는 것보다 더 많은 것이 있습니다.


5
이. 실제로 중요한 것은 변경된 파일 수 또는 변경된 행 수가 아니라 변경 범위 입니다. 짧은 커밋 메시지에서 변경 사항을 간결하고 정확하게 설명 할 수 있다면 물리적 변경 횟수는 상대적으로 중요하지 않습니다. 중요하지는 않지만 나 자신은 일부 커밋보다 소스 코드 트리를 생성하는 커밋 세트보다 코드를 빌드 할 수있는 하나의 큰 커밋을 원합니다 (메소드 서명 변경 참조).
— CVn

8

내가들은 용어는 "청춘 체크인" 입니다. 그리고 나는 그들의 팬이 아닙니다. 나는 프로젝트의 합리적인 단계에서 다른 것이 깨지지 않도록 작은 커밋을 좋아합니다. 큰 커밋은 일반적으로 그 일이 발생했을 때 잠시 동안 잔향하는 문제로 가득 차 있습니다.


+1 당시 기억하지 못 했으므로 (일반적인 용어라고 생각하지 않거나 알지 못하지만) 수은에서 특별히 사용되는 "청크"라는 단어를 들었습니다. 다른 덩어리의 데이터로 큰 커밋을 제출 할 수있는 확장이지만, 그 외에는 일반적으로 커밋이라는 용어를 들어 본 적이 없다고 생각합니다.
— haylem

개발자가 그 용어를 사용했을 때의 회사는 SourceGear Vault를 사용하고있었습니다.
— Jesse C. Slicer

3

내가 전화를 "전형적인 SVN 커밋" 또는 "내일 출시 하루 커밋이다"

SVN을 좋아하는 한 로컬 커밋을 수행 할 수 없다는 사실로 인해 꺼졌습니다.

편집 : 그들은 일반적으로 커밋 메시지에 "stuff"와 "beer"라는 단어가 있습니다.

다시 편집 : 나쁜 습관은 아니지만 많은 변경 사항을 커밋하는 것은 가능한 한 피해야합니다. 짧고 간결한 개정 / 커밋을 검토하는 것이 더 쉽다는 것을 알게되었습니다. (잘 작성된 커밋 메시지와 쌍을 이루었습니다. 나쁜 예는 이전 편집을 참조하십시오)



2
  • 초기 커밋 -SVN에 던져진 개정 제어하에 있지 않은 프로젝트
  • 리팩토링 -아키텍트는 클래스 이름을 Smurf Naming Convention에서 변경하거나 패키지 계층의 루트를 변경하는 것에 대한 훌륭한 아이디어를 가지고 있습니다.
  • 코드 형식 -설계자는 코드 들여 쓰기를 4 칸에서 3 칸으로 변경하거나 줄 끝을 Unix에서 Windows로 (또는 되돌리기) 변경하기로 결정했습니다.
  • 금요일 커밋 -Joe는 항상 금요일 주중 16:30에 일주일 내내 커밋합니다.
  • uuups commit -Ted가 실수로 루트 디렉토리를 삭제하고 커밋 한 후 전체 파일 계층을 다시 SVN으로 펌핑합니다.

0

일반적으로 많은 사람들이 중앙 집중식 VCS를 사용하여 커밋을 많이하는 경향이 있습니다. 특히 서버는 적절한 커밋 정책을 시행합니다. 이는 커밋이 모든 테스트를 통과해야하며 테스트 시간이 더 오래 걸립니다 (몇 초 이상). 따라서 개발자는 여러 번 커밋하고 변경 사항을 여러 개의 작은 커밋으로 나누기 위해 너무 오래 기다리기를 원하지 않습니다.

또한 VCS에 익숙한 개발자는 변경 사항을 여러 개의 작은 커밋으로 나누는 것을 잊을 수 있습니다. 품질 보증팀에 프로그램을 출시 할 때만 커밋해야합니다. 더 나쁜 것은 다른 사람들이 버그가있는 코드를 보지 못하도록하기 위해 QA 테스트를 통과하기 전에 커밋하지 않는 것입니다. 마지막으로, 출력 바이너리, 임시 파일 및 링커 출력을 커밋하여 실제로 "큰"커밋을 생성 한 것을 알지 못했습니다.

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