가장 최근 push의 출력을 가져와 lockfile과의 충돌을 감지하면서 디스크에 씁니다.
lingo pull [--force] [--dry-run]이럴 때 사용하세요#
lingo push는 실행이 완료되면 출력을 바로 기록합니다. 따라서 pull는 동기적으로 기다리지 않았거나 기다릴 수 없었던 경우에만 유용합니다:
- 번역 도중 터미널을 닫은 경우. 터미널을 다시 열고
lingo pull를 실행하면 중단된 지점부터 이어서 가져옵니다. - 다른 머신에서 가져와야 하는 경우. 번역자가 노트북에서
push를 실행하고, CI 또는 팀원이 같은 체크아웃, 같은 엔진, 같은 자격 증명으로pull를 실행하면 동일한 출력을 받을 수 있습니다. - 실행은 끝났지만
push가 쓰기 전에 작업을 재개한 경우. 네트워크가 잠시 끊기거나 프로세스가 종료됐더라도pull가 나머지를 마무리합니다.
실행을 찾는 방식#
pull는 절대 프로젝트 루트 경로에서 파생된 <hash>에 해당하는 ~/.lingo/runs/<hash>.json를 읽습니다. 이 파일에는 push의 마지막 runId가 기록됩니다. 이 파일이 없으면 pull는 오류를 반환합니다:
Error: No run state at ~/.lingo/runs/<hash>.json — run `lingo push` first so we
know which run's outputs to pull.이 파일은 머신별로 관리되며, 저장소 바깥에 위치합니다(이유는 Configuration에서 자세히 설명합니다).
충돌 감지#
각 대상 파일에 쓰기 전에 pull는 다음 두 가지를 비교합니다:
- 디스크에 있는 로컬 파일의 해시
- 마지막으로 알려진 서버 버전으로 **
.lingo/lock.json**에 기록된 해시
둘이 같으면 → 로컬 수정 사항이 없으므로 안전하게 덮어쓸 수 있습니다. 다르면 → 로컬 수정 사항이 있으므로 pull 시 해당 변경 내용이 사라집니다. 이 경우 pull는 중단됩니다:
Error: 3 conflict(s) — rerun with --force여기서 lockfile은 단일 기준점입니다. 소스 콘텐츠가 아니라 서버가 마지막으로 기록한 상태를 추적합니다. 유지하려는 번역 파일의 수동 편집은 커밋해 두어야(pull 이후에도 유지됨) 하고, 덮어써도 된다면 --force로 pull하면 됩니다.
플래그#
--force / -f#
lockfile과 달라진 로컬 대상 파일을 덮어씁니다. 충돌을 검토한 뒤 서버 버전을 기준으로 삼기로 결정했을 때 사용하세요(예: 다른 사람이 우선 반영되어야 할 용어집 업데이트를 push한 경우).
권장 워크플로:
git status # stash or commit local edits first
git stash # if you want to keep them aside
lingo pull --force
git stash pop # re-apply your edits, resolve conflicts manually--dry-run#
파일 시스템은 건드리지 않고 pull가 수행할 작업만 보여줍니다:
lingo pull --dry-run기록될 파일 수와 이미 동기화된 파일 수를 출력합니다. CI에서 아무것도 어긋나지 않았는지 확인할 때 유용합니다.
출력#
성공:
✓ Pulled run run_a8c...: wrote 12 file(s), 4 already in sync.드라이 런:
Dry run complete. 16 file(s) already in sync.실행이 아직 완료되지 않은 경우:
Run run_a8c... is running, not pulling yet.(pull는 진행 중인 run이 끝날 때까지 기다리며 블록하지 않습니다. 나중에 다시 실행하거나, 다음부터는 기다려 주는 push를 사용하세요.)
예외 상황#
- 이전에 push한 적이 없는 경우. 위와 같은 오류가 발생합니다. "서버 어딘가에 있는 번역을 pull한다"는 개념은 없습니다.
pull는 항상 특정 run을 대상으로 합니다. - 삭제되었거나 만료된 run을 가리키는 실행 상태인 경우. 엔진이 404를 반환하고,
pull는 이를 명확하게 알려줍니다.~/.lingo/runs/<hash>.json를 삭제한 뒤push를 다시 실행하세요. .lingo/config.json에 설정된 엔진이 run 생성 당시의 엔진과 다른 경우. 엔진 ID가 일치하지 않아 CLI가 해당 ID와 함께 오류를 표시합니다. 현재 엔진을 대상으로push를 다시 실행하세요.
