콘텐츠로 이동

충돌 다루기

꽤 많은 프로그램이 설정 파일을 읽기만 하는 게 아니라 수정하기도 합니다. 때로는 사용자 역시 원본 설정 파일을 고치는 대신 깜빡하고 대상 설정 파일을 고칠 수도 있습니다. 이를 사용자가 금방 알아챘다면 즉시 dojang reflect 명령으로 해당 변경을 원본에 반영할 수 있지만, 이를 까먹고 원본 설정에 또 다른 변경을 가했다면 충돌이 발생할 수 있습니다.

일단 충돌이 감지되면 dojang apply는 경고를 출력하고 (-f/--force 옵션을 켜지 않은 한) 하려던 작업을 취소합니다. 충돌을 해결하려면 우선 어느 설정 파일이 충돌을 일으키는지 확인해야 합니다. dojang status 명령을 실행하면 충돌을 일으키는 설정 파일을 확인할 수 있습니다. 예를 들어, 다음과 같은 결과를 볼 수 있습니다.

$ dojang status
Source   ST Destination DT File
──────── ── ─────────── ── ──────────────────
modified F  modified    F  HOME/.bash_profile

위 결과는 순서대로 다음을 뜻합니다.

  • modified: 마지막 적용 (dojang apply) 이후 원본 설정 파일이 변경됨.
  • F: 원본 설정 파일은 일반 파일임 (디렉토리나 심볼릭 링크가 아님).
  • modified: 마지막 적용 이후 대상 설정 파일이 변경됨.
  • F: 대상 설정 파일은 일반 파일임 (디렉토리나 심볼릭 링크가 아님).
  • HOME/.bash_profile: 충돌을 일으키는 설정 파일의 원본 경로.

충돌을 일으키는 설정 파일을 확인했다면, 이제 해당 파일에서 어떤 부분이 충돌을 일으키는지 구체적으로 확인해야 합니다. dojang diff 명령을 실행하면 충돌을 일으키는 설정 파일의 변경 내용을 확인할 수 있습니다. 예를 들어, 다음과 같은 결과를 볼 수 있습니다.

$ dojang diff
--- ./HOME/.bash_profile
+++ /home/dahlia/.bash_profile
@@ -1,3 +1,3 @@
-# This line is changed from the source.
+# This line is changed from the destination.

Tip

dojang diff 명령의 출력 형식은 diff --unified 명령과 기본적으로 같습니다. 만약 출력 형식을 다르게 하고 싶다면, --diff-program 옵션을 사용하세요. 예를 들어, --diff-program delta 옵션을 사용하면 delta 프로그램의 출력 형식으로 변경할 수 있습니다.

충돌을 일으키는 설정 파일의 변경 내용을 확인했다면, 이제 충돌을 해결할 차례입니다. 충돌을 해결하는 방법은 크게 세 가지가 있습니다.

  • 대상 파일의 변경 버리고 원본 파일의 변경만 취하기: dojang apply -f 명령을 실행하면 됩니다.
  • 원본 파일의 변경 버리고 대상 파일의 변경만 취하기: dojang reflect -f 명령을 실행하면 됩니다.
  • 원본 파일과 대상 파일의 변경 모두 취하기: 충돌을 일으키는 원본 설정 파일을 직접 수정하고, dojang apply -f 명령을 실행하면 됩니다.