Today
-
Yesterday
-
Total
-
  • [Git] 레포에 파일 유지하면서 변경사항 추적하지 않기 (assume-changed vs skip-worktree)

    Docs/Git(GitHub) 2023. 10. 21. 00:56

    개발을 진행하다보면 특정한 환경에 맞춰진 파일이나 컨피그의 사용을 위해 .gitignore를 설정하는 경우가 많습니다.

    그런데 이미 커밋된 파일을 로컬에서만(또는 리모트에서만) 수정해 사용하려면 어떻게 해야할까요?

    이러한 경우에 .gitignore에 파일을 추가하더라도 변경사항이 계속 추적되므로 다른 방법을 이용해야 합니다.

     

    Git CLI를 이용하여 아래의 명령을 입력하면 Git이 더이상 파일의 변경사항을 추적하지 않습니다.

    git update-index --skip-worktree FILE_NAME

     

    변경사항을 다시 추적하려면 아래의 명령을 입력하면 됩니다.

    git update-index --no-skip-worktree FILE_NAME

     

    Stack Overflow나 국내 블로그 등에서 assume-unchanged 플래그를 추천하는 경우가 있는데, 이는 올바른 사용법이 아닙니다.

     

    • local과 upstream 모두에서 같은 파일을 변경했을 때, git stash / git pull 을 수행하는 경우
      • assume-changed: local 변경사항을 모두 폐기하고 upstream의 파일을 가져옵니다.
      • skip-worktree: 이 플래그가 적용된 파일에는 stash가 작동하지 않습니다. pull을 수행하는 경우 conflict를 어떻게 해결할지 묻습니다.

     

    • upstream에서만 파일을 변경했을 때, git pull을 수행하는 경우
      • assume-changed: 파일이 업데이트되고, 플래그가 사라집니다.
      • skip-worktree: 파일이 업데이트되고, 플래그는 유지됩니다.

     

    • local에서만 파일을 변경했을 때, git reset --hard를 수행하는 경우
      • assume-changed: 파일이 복구되고, 플래그가 사라집니다.
      • skip-worktree: 파일과 플래그는 유지됩니다.

     

    용도에 따라 다르게 사용할 수 있는 플래그이지만, 이 글에서 목표로하는 목적대로의 사용은 skip-worktree가 적절하겠습니다.

     

    참고: https://stackoverflow.com/questions/13630849/git-difference-between-assume-unchanged-and-skip-worktree

©2023 Coupyworks