lingo pull
가장 최근 push의 출력을 가져와 lockfile과의 충돌을 감지하면서 디스크에 씁니다.
lingo pull [--force] [--dry-run]이럴 때 사용하세요#
lingo push은 실행이 제출되면 바로 종료되므로, 출력은 pull으로 가져옵니다. --wait 없이 푸시한 뒤에는 언제든 실행할 수 있고, --wait로 푸시했지만 기록하지 못한 경우에도 실행하세요:
- 번역 도중 터미널을 닫은 경우. 터미널을 다시 열고
lingo pull를 실행하면 중단된 지점부터 이어서 가져옵니다. - 같은 CI 작업의 나중 단계에서. 한 단계에서
lingo push을 실행하고, 같은 러너와 체크아웃의 다음 단계에서lingo pull을 실행해 출력을 가져옵니다. 다른 머신에서는 커밋된 뒤에 받을 수 있습니다. - 실행은 끝났지만
push가 쓰기 전에 작업을 재개한 경우. 네트워크가 잠시 끊기거나 프로세스가 종료됐더라도pull가 나머지를 마무리합니다.
실행을 찾는 방식#
pull는 절대 프로젝트 루트 경로에서 파생된 ~/.lingo/runs/<hash>.json에 해당하는 <hash>를 읽습니다. 이 파일에는 runId의 마지막 push가 기록됩니다. 이 파일이 없으면 pull는 오류를 반환합니다:
Error: No saved run state for this project (looked for ~/.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 lrg_a8c...: wrote 12 file(s), 4 already in sync.드라이 런:
Dry run complete. 16 file(s) already in sync.실행이 실패했거나 취소된 경우:
Run lrg_a8c... is failed, not pulling yet.(pull은 아직 대기 중이거나 실행 중인 실행이 있으면 push --wait와 같은 진행 표시를 보여주며 기다린 뒤, 출력을 기록합니다. 실패했거나 취소된 실행에서는 가져올 출력이 없습니다. 실행, 상태 및 복구를 참조하세요.)
예외 상황#
- 이전에 push한 적이 없는 경우. 위와 같은 오류가 발생합니다. "서버 어딘가에 있는 번역을 pull한다"는 개념은 없습니다.
pull는 항상 특정 run을 대상으로 합니다. - 삭제되었거나 만료된 run을 가리키는 실행 상태인 경우. 엔진이 404를 반환하고,
pull는 이를 명확하게 알려줍니다.~/.lingo/runs/<hash>.json를 삭제한 뒤push를 다시 실행하세요. .lingo/config.json에 설정된 엔진이 run 생성 당시의 엔진과 다른 경우. 엔진 ID가 일치하지 않아 CLI가 해당 ID와 함께 오류를 표시합니다. 현재 엔진을 대상으로push를 다시 실행하세요.