다음을 통해 공유


SccGet 함수

이 함수는 편집용 아닌 보기 및 컴파일을 위해 하나 이상의 파일 복사본을 검색합니다. 대부분의 시스템에서 파일은 읽기 전용으로 태그가 지정됩니다.

구문

SCCRTN SccGet(
   LPVOID    pvContext,
   HWND      hWnd,
   LONG      nFiles,
   LPCSTR*   lpFileNames,
   LONG      fOptions,
   LPCMDOPTS pvOptions
);

매개 변수

pvContext

[in] 소스 제어 플러그 인의 컨텍스트 구조입니다.

hWnd

[in] 소스 제어 플러그 인이 제공하는 대화 상자의 부모로 사용할 수 있는 IDE 창에 대한 핸들입니다.

nFiles

[in] lpFileNames 배열에 지정된 파일 수 입니다.

lpFileNames

[in] 검색할 파일의 정규화된 이름의 배열입니다.

fOptions

[in] 명령 플래그(SCC_GET_ALL, SCC_GET_RECURSIVE)입니다.

pvOptions

[in] 소스 제어 플러그 인 관련 옵션입니다.

반환 값

이 함수의 소스 제어 플러그 인 구현은 다음 값 중 하나를 반환해야 합니다.

Description
SCC_OK 가져오기 작업에 성공했습니다.
SCC_E_FILENOTCONTROLLED 파일이 소스 제어에서 사용되고 있지 않습니다.
SCC_E_OPNOTSUPPORTED 원본 제어 시스템이 이 작업을 지원하지 않습니다.
SCC_E_FILEISCHECKEDOUT 사용자가 현재 체크 아웃한 파일을 가져올 수 없습니다.
SCC_E_ACCESSFAILURE 네트워크 또는 경합 문제로 인해 소스 제어 시스템에 액세스하는 데 문제가 발생했습니다. 다시 시도하는 것이 좋습니다.
SCC_E_NOSPECIFIEDVERSION 잘못된 버전 또는 날짜/시간을 지정했습니다.
SCC_E_NONSPECIFICERROR 일반적인 오류, 파일이 동기화되지 않았습니다.
SCC_I_OPERATIONCANCELED 작업이 완료되기 전에 취소되었습니다.
SCC_E_NOTAUTHORIZED 사용자에게 이 작업을 수행할 권한이 없습니다.

설명

이 함수는 검색할 파일 이름의 개수와 배열로 호출됩니다. IDE가 SCC_GET_ALL 플래그를 전달하면 이는 lpFileNames의 항목이 파일이 아니라 디렉터리이며 지정된 디렉터리에서 소스 제어 상태인 모든 파일을 검색해야 함을 의미합니다.

SCC_GET_ALL 플래그를 SCC_GET_RECURSIVE 플래그와 결합하여 지정된 디렉터리와 모든 하위 디렉터리의 모든 파일도 검색할 수 있습니다.

참고 항목

SCC_GET_RECURSIVESCC_GET_ALL 없이 전달되어서는 안 됩니다. 또한 C:\AC:\A\B 디렉터리가 모두 재귀 가져오기에서 전달되는 경우 C:\A\B 및 모든 하위 디렉터리는 실제로 두 번 검색됩니다. 이와 같은 복제본이 배열 외부에 유지되도록 하는 것은 소스 제어 플러그 인이 아니라 IDE의 책임입니다.

마지막으로 소스 제어 플러그 인이 초기화 시 SCC_CAP_GET_NOUI 플래그를 지정하여 Get 명령에 대한 사용자 인터페이스가 없음을 나타내는 경우에도 IDE에서 이 함수를 호출하여 파일을 검색할 수 있습니다. 플래그는 단순히 IDE가 Get 메뉴 항목을 표시하지 않으며 플러그 인이 UI를 제공할 것으로 예상되지 않음을 의미합니다.

파일 이름 바꾸기 및 SccGet

상황: 사용자가 파일(예: a.txt)을 체크 아웃하고 수정합니다. a.txt를 체크 인하기 전에 두 번째 사용자가 소스 제어 데이터베이스에서 a.txt의 이름을 b.txt로 바꾸고 b .txt, 파일을 일부 수정하고 파일을 체크 인합니다. 첫 번째 사용자는 두 번째 사용자가 변경한 내용을 원하므로 첫 번째 사용자는 로컬 버전의 a.txt 파일 이름을 b.txt로 바꾸고 파일에 대해 가져오기를 수행합니다. 그러나 버전 번호를 추적하는 로컬 캐시는 여전히 a.txt의 첫 번째 버전이 로컬에 저장되어 있다고 생각하므로 소스 제어가 차이점을 해결할 수 없습니다.

소스 제어 버전의 로컬 캐시가 소스 제어 데이터베이스와 동기화되지 않는 이 상황을 해결하는 두 가지 방법이 있습니다.

  1. 현재 체크 아웃된 소스 제어 데이터베이스의 파일 이름 바꾸기를 허용하지 않습니다.

  2. "이전 항목 삭제" 다음에 "새 항목 추가"와 동일한 작업을 수행합니다. 다음 알고리즘은 이를 수행하는 한 가지 방법입니다.

    1. SccQueryChanges 함수를 호출하여 소스 제어 데이터베이스에서 a.txtb.txt로 이름을 바꾸는 방법을 알아봅니다.

    2. 로컬 a.txt의 이름을 b.txt로 바꿉니다.

    3. a.txtb.txt 모두에 대해 SccGet 함수를 호출합니다.

    4. 소스 제어 데이터베이스에 a.txt가 없기 때문에 로컬 버전 캐시에서 누락된 a.txt 버전 정보가 제거됩니다.

    5. 체크 아웃 중인 b.txt 파일은 로컬 b.txt 파일의 내용과 병합됩니다.

    6. 이제 업데이트된 b.txt 파일을 체크 인할 수 있습니다.

참고 항목