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). .gitignore에 default_values.txt를 넣으십시오. 사람들에게 로컬 작업 공간에서 default_values_template.txt를 default_values.txt로 복사하고 필요에 따라 변경하도록 지시하십시오.


답변

얼룩 / 깨끗한 스크립팅을 살펴보십시오. 이 방법으로 파일을 버전 제어 할 수 있지만 체크 아웃되면 일반 / 자리 표시 자 데이터를 파일의 시스템 특정 데이터로 바꾸어 파일을 “스머지”합니다.

커밋 할 때 컴퓨터 별 정보를 일반 또는 자리 표시 자 정보로 바꾸어 “정리”합니다.

얼룩 / 깨끗한 스크립트는 스크립트를 여러 번 적용하면 순서대로 마지막 스크립트를 실행하는 것과 같은 순서로 결정적이어야합니다.

리포지토리를 노출해야하지만 내용에 중요한 정보가 포함되어있는 경우에도 암호를 적용 할 수 있습니다.


답변

인덱스에서 파일의 내용을 간단히 정리하기 위해 “clean”필터를 정의하여이 문제를 해결했습니다.

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

#! /bin/sh

git show :$1

해당 파일을 “clean”필터로 설정하십시오 ( “discard_changes”에 넣었다고 가정).

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

불행히도 클린 스크립트 내부에서 처리중인 파일을 알 수있는 방법이 없으므로 여러 파일에 일반화 할 수있는 방법을 찾을 수 없습니다. 물론 각 파일에 대해 다른 필터 규칙을 추가하는 것을 막을 수는 없지만 약간 어색합니다.


답변

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


답변

하위 모듈을 살펴 보는 것이 좋습니다. 머신 특정 파일을 서브 모듈에 배치하면 git add는이를 무시해야합니다.