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


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.