Program Tip

Git은 추적 된 파일의 일부에 대한 로컬 변경 사항을 무시합니다.

programtip 2020. 11. 16. 22:03
반응형

Git은 추적 된 파일의 일부에 대한 로컬 변경 사항을 무시합니다.


특히, 내 dotfile의 git 저장소를 유지합니다. 나는 최근에 새 컴퓨터에서 작업을 시작했고 동일한 저장소에 내 저장소를 복제했습니다.

이제이 시스템에만 해당하는 내 dotfile을 변경하고 싶습니다. 내 저장소에서 무시하고 싶은 변경 사항입니다.

내가 만든 다른 변경 사항은 계속 추적하고 커밋해야합니다.

예를 들어 내 .gitconfig에는 다음과 같은 설정이 있습니다.

[push]
   default = simple

이제 내 새 컴퓨터에서 git 버전이 매우 오래되었습니다. 여전히 simple푸시 설정 지원하지 않습니다 . 그래서 이것을 변경하고 싶지만 로컬에서만 가능합니다.

그러나 .gitconfig에 다른 변경 사항이 있으면 해당 사항을 추적하고 싶습니다. 어쨌든 나는 이것을 얻을 수 있습니까?

편집 :
나는 알고있다 git update-index --assume-unchanged. 문제는 내가 되돌릴 때까지 git이 더 이상 내 파일을 전혀 추적하지 않는다는 것입니다. 그런 다음 모든 변경 사항을 추적합니다.
특정 변경 사항을 무시하고 나머지는 추적하고 싶습니다.


파일의 특정 변경 사항을 '추적 해제'하는 특정 명령이 있다고 생각하지 않습니다. 그러나 원격에서 변경 사항을 가져 오지만 변경 사항을 다시 보내지 않는 로컬 분기를 만들 수없는 이유는 없습니다.


다음 명령을 사용해보십시오.

git update-index --assume-unchanged FILENAME_TO_IGNORE

되돌리려면 (변경 사항을 커밋하려는 경우) 다음을 사용하십시오.

git update-index --no-assume-unchanged

업데이트 :

현재 디렉토리 아래에 '변경되지 않은 것으로 가정' 파일 을 나열하는 방법은 다음과 같습니다 .

git ls-files -v | grep -E "^[a-z]"

-v옵션은 '변경되지 않은 것으로 가정'파일에 소문자를 사용합니다.


다음은 특정 문제에 대한 대체 솔루션입니다. machine-config 구성을 ~/.gitconfig.local파일에 배치 한 다음 버전 제어에 다음을 입력합니다 ~/.gitconfig.

[include]
    path = ~/.gitconfig.local

이것은 Git에게 발견 된 모든 것을 ~/.gitconfig.local마치 ~/.gitconfig. 예, 설정을 재정의 할 수 있습니다. 아니요, 파일이 존재하지 않아도됩니다 (가 없으면 Git은 설정을 자동으로 무시합니다 ~/.gitconfig.local).

대한 자세한 내용은 여기참조 하십시오[include] .

Emacs, Zsh, Git, Tmux 등의 구성에서이 전략을 따르므로 버전 제어 파일을 수정할 필요없이 사용자 정의 할 수 있습니다. 이를 위해, 내가 가진 init.local.el, .zshrc.local, .gitconfig.local, .tmux.local.conf, 등.


Peter가 제안한대로 이러한 시스템 특정 변경 사항을 분기에 유지할 수 있습니다. 분명히 당신은 "mainline"에서 그 머신 특정 파일에 대한 변경을 엄격하게 분리하도록주의해야 할 것입니다. 이를 수행하는 두 가지 방법이 있습니다.

  1. 메인 라인을 변경할 때마다 브랜치를 계속 리베이스 (내 선호도)
  2. 메인 라인 변경 사항을 브랜치에 계속 병합합니다 (하지만 다른 방향으로는 절대 병합 하지 않음 )

참고 URL : https://stackoverflow.com/questions/21756531/git-ignore-local-changes-to-portions-of-tracked-files

반응형