만약 한개의 파일을 가지고 2명의 사람이 동시에 수정작업을 거쳐서 체크인하게된다면 어떤 상황이 벌어질까? 아마 이대로는 한개의 파일이 쓰여지고 다른 파일이 그 파일을 덮어 쓰는 상황이 벌어질 것이다.
엄격한 잠금
파일을 체크아웃하는 시점부터 그 파일들은 읽기전용의 속성으로 변경된다. 따라서 다른 사람이 그 파일을 체크아웃하더라도 수정을 할 수는 없게되는 것이다.
낙관적 잠금
다수의 체크아웃을 허용하는 대신에 체크인을 하는 때에, 저장소에 저장된 파일들을 로컬 작업공간에 반영시킨다.
Original
~cpp
public class File1 {
public String getName() {
return "Wibble";
}
public int getSize() {
return 42;
}
}
Fix 01
~cpp
public class File1 {
public String getName() {
return "WIBBLE";
}
public int getSize() {
return 42;
}
}
Fix 02
~cpp
public class File1 {
public String getName() {
return "Wibble";
}
public int getSize() {
return 99;
}
}
상기와 같은 식으로 소스를 수정한뒤 fix01, fix02를 순차적으로 체크인하면 fix01에 의해서 저장소에 있는 파일이 갱신되었기 때문에 fix02가 체크인 되는 시점에서 충돌이 일어나게 된다. 이경우 CVS는 fix02의 소스에서 fix01에 반영된 3번째 줄의 변경내용을 병합하여 로컬 작업 공간에 반영하고 체크인하게된다.
일반적으로 낙관적 잠금으로 구현된 ~cpp VersionControl
을 선호한다.