체크인과 체크 아웃의 차이점은 무엇입니까?


14

Software Configuration Management에 익숙하지 않은 학생들에게 SCM 수업을 가르 칠 때 " What's the difference between checkin and checkout?" 와 같은 질문이 생깁니다 .

그리고 그 변형은 이러한 학생들이 이러한 SCM 개념에 대해 혼란스러워한다는 것입니다 (그들은 다른 방식으로 이해합니다).

그렇다면 이러한 중요한 SCM 개념을 그러한 청중에게 설명하기 위해 어떤 종류의 은유를 사용할 수 있습니까?


체크 아웃 = 잠금; 체크인 = 잠금 해제; 작업을 수행하는 분기에서 해당 개체를 편집하기 위해 독점 잠금을 사용합니다.
— Jiri Klouda

답변:


8

다른 사람에게 무언가를 설명하려면, 이미 잘 알고있는 것과 비교해보십시오.

그래서 나는 그런 질문에 다음과 같이 대답합니다.

숙박 장소 (호텔, 리조트 등)에 도착한다고 생각하십시오.

  • 맨 처음 (도착하면) 당신이 할 일은이다 checkin.
  • 당신이 하는 가장 마지막 일은 (당신이 떠날 때)입니다 checkout.

이 점을 제외하고 ... 소프트웨어 구성 요소에 대한 변경 사항을 적용 할 때 유사한 SCM의 개념은 적용 이 주위에 다른 방법을 적용한다 :

  • 가장 먼저하는 일은 (시작할 때) checkout차용하는 것입니다.
  • 당신이 ( 마지막 때) 가장 마지막으로하는 것은 checkin(또는 그것을 돌려주는 것처럼 생각하는 것)입니다.

참고 : 이는 중앙 집중식 시스템 (예 : 메인 프레임 환경에서 사용되는 시스템)에 적용됩니다. 와 같은 시스템 에서 " checkout"개념은 완전히 다른 의미를 갖습니다 (이러한 IMO는 이러한 시스템에서 두 개념에 대해 혼동이 거의 없습니다).


아마도 코드는 호텔 방보다 도서관 책과 더 비슷할까요?
— Toby Speight

이것은 다소 순진하고 평신도의 대답입니다. 나는 소스 제어 시스템의 내부에서 10 년 동안 일해 왔으므로 귀하의 질문에 좀 더 심층적 인 답변을 추가했습니다.
— Jiri Klouda

6

"체크인"및 "체크 아웃"이라는 용어는 SCM 시스템의 유형에 따라 다른 의미를 갖습니다.

TFVC, Subversion 및 Clearcase와 같은 중앙 집중식 시스템은 "독점적"체크 아웃을 사용합니다. 이것은 한 명의 사용자 만 한 번에 파일을 체크 아웃 할 수있는 Pierre의 책 빌리는 은유와 같습니다.

git과 같은 분산 시스템에는 "checkout"명령이 있지만 완전히 다른 것을 의미합니다. git checkout로컬 저장소로 작업 할 때 분기 간을 전환하는 데 사용됩니다.


분산 시스템에 대한 Dave의 장점! 사실 그것은 처음에 (GIT에 대해 처음 알게되었을 때) 나 자신이 몹시 혼란 스러웠던 이유이기도합니다. 귀하의 답변을 무효화하지 않기 위해 (내 질문을 조정함으로써), 나는 그것을 명확히하기 위해 내 자신의 답변을 수정했습니다.
— Pierre.Vriens

git checkout은 저장소에서 객체를 체크 아웃하는 데 사용됩니다. 이는 브랜치 또는 단일 파일 일 수 있습니다.
— Dave Swersky

4

중앙 집중식 시스템의 경우 기술 라이브러리처럼 생각하십시오. (이 가상 라이브러리가 어떻게 작동하는지 상상력의 확장이 될 수 있습니다 ...)

문서 작성자 인 checkout경우 라이브러리 사본을 작성하고 변경 check it back in한 후 전 세계가 볼 수 있도록 라이브러리로 되돌릴 수 있습니다.

라이브러리에 디지털 사본이있는 경우 문제가 될 수 있으며 checkout, 문서, 다른 사람도 checks out문서 인 경우 둘 다 변경하면 충돌 (병합 병합)이 발생하여 해결하기 어려울 수 있습니다. 그때의 초기 "수정"이 독점적 인 checkout기능 이라면 ...


중요한 병합 충돌 문제의 가능성은 (사람들이 시스템의 다른 부분에 작업 할) 감소 대형 프로젝트에 대한 물론 그렇게 checkout/ checkin거의 많이 필요하지 않습니다. 또한 분산 시스템은 설계 상 다른 많은 이점과 함께 우수한 병합 기능이 다소 필요하기 때문에 git 및 기타 DVCS에는 그 개념이 실제로 존재하지 않습니다.


그것을 보는 또 다른 방법입니다. 내 경험상 비록 "충돌"과 "병합"과 같은 것을 추가하는 것이 좋지 않다고 생각합니다.
— Pierre.Vriens

공정, 나는 그것을 체크 아웃 / 체크인하는 주된 이유가 내가 생각할 수 있기 때문에 추가했다. 그리고 그 개념이 실제로 유용한 지 모른다면 개념을 파악하는 것이 더욱 어려워집니다.
— Thymine

2

SCM 저장소 를 주요 주제로 사용하면

  • 체크 아웃 이 로컬 또는 원격 저장소 (로컬 작업 디렉토리로)에서 변경 사항 을 가져옵니다.
  • 체크인 이 로컬 또는 원격 저장소 (로컬 작업 디렉토리에서) 로 변경 사항을 다시 넣는 중입니다.

이 답변 메르 도 . 그것은 당신이 어떤 종류의 "유 (metaphor)"(내 질문 에서처럼)를 생각할 수 있을지 아직도 궁금하지만, 그것을 설명하는 방법입니다. 예를 들어 로컬 또는 원격 저장소가 실제로 무엇인지 전혀 알지 못하는 사람에게 설명 할 수 있습니다 .
— Pierre.Vriens

사실, 그들이 저장소가 무엇인지에 대한 단서가 없다면 체크인 및 체크 아웃을 가르치려고 시도하는 것은 의미가 없습니다. 이제 소스 제어에 대한 은유에 대해 재무 회계 / 부기과 비교할 수 있습니다. 기본적으로 자산 가치의 변화를 추적하고 있습니다. 너무 큰 그룹은 아니지만 단일 개별 변경 또는 변경 그룹 (예 : 택시 티켓 + 버스 티커 + 기차 티켓 + ... 대신 "A에서 B로 여행")을 기록합니다 (예 : "월요일의 모든 비용"). 마찬가지로 리포지토리는 개별 또는 너무 큰 그룹이 아닌 소스 코드 변경을 추적합니다.
— hlovdal

1
  • Checkout 은 리포지토리에서 개체의 분기를 수정하는 독점 잠금입니다.
  • 체크인 은 독점 잠금 해제입니다.

가장 작은 분기 단위에 따라 두 가지 종류의 소스 제어 시스템이 있습니다.

1) 리포지토리 당 분기 (CVS, SVN, GIT, Perforce 등)

전체 저장소를 분기하는 제품에서, 체크 아웃 은 일반적으로 전체 저장소의 로컬 분기 (복사)를 작성하거나 수정합니다. 이러한 제품에서 체크인 은 종종 사용되지 않으며 커밋 작업 의 일부가됩니다. 이 작업은 한 번 에 원격 지점을 체크 아웃 하고 로컬 패치를 적용 하고 단일 지점에서 원격 지점을 체크인 합니다. 로컬 지점이 영구적으로 체크 아웃 되었으므로 체크인 하지 않습니다 . (참고 : GIT에서는 원격 브랜치에 커밋하지 않고 로컬 커밋을 푸시합니다. 엄밀히 구문 상 차이가 있습니다. )

2) 객체 별 분기 (ClearCase, AccuRev, Oracle ADE)

디렉토리, 파일 등과 같은 개별 오브젝트를 분기하는 제품의 경우 체크 아웃 및 체크인 개념은 분기당 오브젝트마다 적용됩니다. 체크 아웃으로 객체를 수정하고 체크인으로 해제 하도록 객체를 잠급니다 . 이러한 제품에서는 종종 잠금을 사용하지 않는 개인 브랜치에서 작업하고 로컬 브랜치를 공유 브랜치로 병합 할 때 샤드 브랜치 (메인, 마스터, 피처 브랜치 등) 에서도 개체를 체크 아웃합니다 . ) 병합 충돌이 해결되고 공유 분기에서 개체가 체크인 됩니다. 이를 통해 여러 사람이 같은 개체를 수정하지 않는 한 공유 분기에 동시에 "커밋"할 수 있습니다.


지리 야 대답 해줘 당신이 언급 한 그 두 종류에 대해 나는 동의 할 것입니다. 그러나 메인 프레임 세계의 SCM 도구 (내 경험에서 비롯된 것)에서는 "잠금"을 고려하지 않습니다 ... 답에 3 번째 종류를 추가하는 방법을 생각할 수 있습니까?
— Pierre.Vriens

이 두 범주에 맞지 않는 제품의 예를 들어 주시겠습니까? 2 개 중 어느 것이 맞는지 알려줄 수도 있고 실제로 3 개를 추가 할 수도 있습니다. 체크 아웃 및 체크인은 지점에 대한 조작으로 수정 권한을 부여합니다. 따라서이 질문에 대해 제품 분기 (전체 저장소 또는 개별 객체)를 분할하는 것이 당연합니다. 사이에 어떤 것이 있는지 모르겠습니다. 무엇입니까? Perforce 및 Subgit에서와 같이 하위 트리의 분기는 기본적으로 첫 번째 범주입니다. 잠금은 '독점적 권리'의 다른 이름 일뿐입니다.
— Jiri Klouda

BTW 앞에서 언급 한 라이브러리 비유는 정말 좋습니다. 책을 체크 아웃하면 독점권을 얻게됩니다. 집에 가져 가서 원하는대로 처리하십시오. 책을 읽거나 여백에 메모를 쓰면 책을 체크 아웃 한 동안 아무도 책을 수정할 수 없습니다. 일부 페이지를 제거하거나 일부 행을 강조 표시하는 것처럼. 당신이 책을 체크인 할 때, 사람들은 도서관에서 그것을 읽을 수 있습니다. 도서관 사서의주의 깊은 눈은 어떠한 수정 (기물 파손)을 허용하지 않거나 그것을 체크 아웃하고 집으로 가져갑니다. 해당 책의 변경 사항을 직렬화합니다.
— Jiri Klouda

라이브러리의 다른 브랜치에서 유추를 계속하기 위해 동일한 책이 다른 수정 사항이 있거나 전혀 변경되지 않았거나 전혀 없을 수 있습니다. 다른 사람이 동시에 체크 아웃 할 수 있습니다 (예 : 체크 아웃은 지점 당). 이제 원작자는 마스터 브랜치 인 2nd edition에서 작업합니다. 그는 여러 지점에서 메모를 읽고 함께 병합하여 마스터 지점을 체크 아웃하고 2 판을 체크인 할 수있었습니다. 도서관의 각 지점은 2 판을 구입하여 사본을 새로 고칩니다. 그들은 첫 번째를 버릴 수 있거나 여전히 유용한 메모를 여백에서 새 판으로 복사 할 수 있습니다.
— Jiri Klouda
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.