developer tip

git이 파일의 향후 개정을 무시하도록하려면 어떻게해야합니까?

copycodes 2020. 8. 13. 23:32
반응형

git이 파일의 향후 개정을 무시하도록하려면 어떻게해야합니까?


git 저장소에 포함 된 파일의 기본 버전을 만들었습니다. 누군가가 저장소를 복제 할 때이 파일의 사본을 얻는 것이 중요합니다. 그러나 나중에이 파일의 변경 사항을 무시하도록 git을 설정하고 싶습니다. .gitignore추적되지 않은 파일에서만 작동합니다.

내 동기는이 파일에 기계 별 정보가 포함되어 있다는 것입니다. 기본 값을 제공하고 사람들이 원본 저장소로 다시 푸시되지 않는 로컬 변경을 허용하여 새 변경 사항을 가져올 때 병합 충돌을 생성하도록 허용하고 싶습니다.

우리는 일반적으로 꽤 게으르고 git add .많이 사용 하기 때문에 git에게이 파일을 무시하라고 말할 수 없다면 변경 사항이 커밋되고 푸시 될 것이라고 확신합니다.

요약,

  1. 파일을 만들고 default_values.txt내 git 저장소에 추가되고 누군가 해당 저장소를 복제 할 때 포함 되는 파일을 호출하고 싶습니다.
  2. git add .default_values.txt커밋에 추가해서는 안됩니다 .
  3. 이 동작은 저장소의 모든 복제본에 전달되어야합니다.

다른 많은 사람들이 언급했듯이 좋은 현대적인 솔루션은 다음과 같습니다.

git update-index --skip-worktree default_values.txt

다음을 사용하여 다시 허용하기로 결정할 때까지 로컬 및 업스트림 파일의 변경 사항을 무시합니다.

git update-index --no-skip-worktree default_values.txt

다음으로 건너 뛴 것으로 표시된 파일 목록을 가져올 수 있습니다.

git ls-files -v . | grep ^S

--skip-worktree와 달리 --assume-unchanged 상태는 업스트림 변경 사항을 가져 오면 손실됩니다.


당신이 찾고있는 것은 git update-index --assume-unchanged default_values.txt입니다.

자세한 내용은 문서를 참조하십시오. http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html


내가 일반적으로 본 접근 방식은 다른 이름으로 파일을 만드는 것입니다. 예 : default_values_template.txt 및 default_values.txt를 .gitignore에 넣습니다. 사람들에게 default_values_template.txt를 로컬 작업 공간의 default_values.txt에 복사하고 필요에 따라 변경하도록 지시합니다.


얼룩 / 깨끗한 스크립팅을 살펴보십시오. 이렇게하면 파일의 버전을 제어 할 수 있지만 체크 아웃 할 때 일반 / 자리 표시 자 데이터를 파일의 시스템 특정 데이터로 대체하여 파일을 "번짐"합니다.

커밋 할 때 컴퓨터 특정 정보를 일반 또는 자리 표시 자 정보로 대체하여 "정리"합니다.

문지르 기 / 깨끗한 스크립트는 여러 번 적용한다는 점에서 결정적이어야하며 다른 순서로 시퀀스의 마지막 스크립트를 실행하는 것과 동일합니다.

저장소를 노출해야하는 경우 비밀번호에도 동일하게 적용 할 수 있지만 콘텐츠에 민감한 정보가 포함될 수 있습니다.


색인에있는 파일의 내용을 간단히 분류하기 위해 "clean"필터를 정의하여이 문제를 해결했습니다.

git show :path/to/myfile 지정된 파일에 대한 색인의 내용 만 인쇄해야하므로 스크립트에서이를 사용하여 작업 사본을 색인의 변경되지 않은 사본으로 바꿀 수 있습니다.

#! /bin/sh

git show :$1

관련 파일에 대한 "깨끗한"필터로 설정합니다 ( "discard_changes"에 넣었다고 가정).

$ git config filter.ignore_myfile.clean "discard_changes path/to/myfile"
$ echo "path/to/myfile filter=ignore_myfile" >> .gitattributes

안타깝게도이 파일을 여러 파일에 일반화 할 수있는 방법을 찾을 수 없습니다. 깨끗한 스크립트 내에서 처리중인 파일을 알 수있는 방법이 없기 때문입니다. 물론 각 파일에 대해 다른 필터 규칙을 추가하는 것을 막을 수는 없지만 약간 어색합니다.


우리 팀에 적합한 솔루션을 찾았습니다. 심볼릭 링크를 통해 githook을 공유하고 git에 템플릿 파일을 추가 한 후 템플릿 파일이 수정되었는지 여부를 확인하는 사전 커밋 후크를 추가했습니다 git reset -- templatefile.txt. 변경된 유일한 파일 인 경우 커밋도 중단합니다.


하위 모듈을 살펴 보는 것이 좋습니다. 시스템 특정 파일을 하위 모듈에 배치하는 경우 git add는이를 무시해야합니다.

참고 URL : https://stackoverflow.com/questions/4348590/how-can-i-make-git-ignore-future-revisions-to-a-file

반응형