참고 : fallengamer 는 2011 년에 일부 테스트를 수행했으며 (구식 일 수 있음) 다음은 그의 연구 결과입니다 .
운영
- 파일은 로컬 저장소와 업스트림에서 모두 변경됩니다
git pull
.
Git은 로컬 변경 사항을 유지합니다.
따라서 실수로 플래그로 표시 한 데이터는 손실되지 않습니다.
assume-unchanged
플래그가있는 파일 : Git은 로컬 파일을 덮어 쓰지 않습니다. 대신 충돌을 해결하는 방법과 조언을 출력합니다.
skip-worktree
플래그가있는 파일 : Git은 로컬 파일을 덮어 쓰지 않습니다. 대신 충돌을 해결하는 방법과 조언을 출력합니다.
- 파일은 로컬 저장소에서 모두 변경하고 업스트림, 어쨌든 당겨하려고
사용하여 몇 가지 추가 수작업에 결과를하지만 로컬 변경 사항이 있다면 적어도 당신은 어떤 데이터가 손실되지 것입니다.
git stash
git pull
skip-worktree
assume-unchanged
플래그가있는 파일 : 모든 로컬 변경 사항을 복원 할 가능성없이 버립니다. 효과는 ' git reset --hard
' 와 같습니다 . ' git pull
'전화 성공
skip-worktree
플래그가있는 파일 : 파일에서 Stash가 작동하지 않습니다 skip-worktree
. ' git pull
'는 위와 동일한 오류로 실패합니다. 개발자는 수동으로 skip-worktree
플래그를 재설정 하여 오류를 숨기고 완료 할 수 있습니다 pull
.
- 로컬 변경 사항 없음, 업스트림 파일 변경됨
두 플래그 모두 업스트림 변경 사항을 얻지 못하게합니다. 힘내는 당신이 약속을 어 겼음을 감지 하고 깃발을 재설정하여 현실을 반영하기로 결정했습니다.
git pull
assume-unchanged
assume-unchanged
플래그가있는 파일 : 내용이 업데이트되고 플래그가 손실됩니다.
' git ls-files -v
'는 H
(에서 h
) 로 플래그가 수정되었음을 나타냅니다 .
skip-worktree
플래그가있는 파일 : 내용이 업데이트되고 플래그가 유지됩니다.
' git ls-files -v
'는 S
이전 과 같은 플래그를 표시 합니다 pull
.
- 로컬 파일이 변경 되면
Git은 파일을 건드리지 않고 파일에 대한 실제 (실제로 변경되지 않은 것으로 약속 된 파일이 변경됨)를 반영 합니다.
git reset --hard
skip-worktree
assume-unchanged
- 와 파일
assume-unchanged
플래그 : 파일의 내용이 복귀한다. 플래그가 H
(에서 h
) (으 )로 재설정되었습니다 .
- 와 파일
skip-worktree
플래그 : 파일 내용 그대로입니다. 플래그는 동일하게 유지됩니다.
그는 다음 분석을 추가합니다.
것 같습니다 skip-worktree
되어 해당 지역의 데이터를 보존하기 위해 매우 열심히 노력하고 . 그러나 안전한 경우 업스트림 변경을 방지 할 수는 없습니다. 또한 git은의 플래그를 재설정하지 않습니다 pull
.
그러나 ' reset --hard
'명령을 무시하면 개발자에게는 큰 놀라움이 될 수 있습니다.
Assume-unchanged
작업에서 플래그가 손실 될 수 있으며 해당 pull
파일의 로컬 변경 사항은 git에 중요하지 않은 것 같습니다.
보다:
그는 결론 :
실제로 어느 플래그도 직관적이지 않습니다 .
assume-unchanged
개발자가 파일을 변경해서는 안된다고 가정합니다. 파일이 변경된 경우 해당 변경은 중요하지 않습니다. 이 플래그는 SDK와 같은 변경되지 않는 폴더의 성능을 향상시키기위한 것입니다.
그러나 약속이 깨지고 파일이 실제로 변경되면 git은 플래그를 되돌려 현실을 반영합니다. 일반적으로 변경되지 않는 폴더에 일관성이없는 플래그를 사용하는 것이 좋습니다.
반면에 skip-worktree
git에게 특정 파일을 만지지 않도록 지시 할 때 유용합니다. 이미 추적 된 구성 파일에 유용합니다.
업스트림 기본 리포지토리에는 프로덕션 준비 구성이 일부 있지만 로컬 테스트를 수행 할 수 있도록 구성의 일부 설정을 변경하려고합니다. 그리고 프로덕션 구성에 영향을주기 위해 이러한 파일의 변경 사항을 실수로 확인하고 싶지는 않습니다. 이 경우 skip-worktree
완벽한 장면을 만듭니다.
Git 2.25.1 (2020 년 2 월)을 사용하면 위에서 언급 한 "실제로 어느 플래그도 직관적이지 않습니다"가 더 명확 해집니다.
brian m의 commit 7a2dc95 , commit 1b13e90 (2020 년 1 월 22 일)을 참조하십시오 . 칼슨 ( bk2204
) .
(의해 병합 - Junio C 하마노 gitster
- 에 53a8329 커밋 2,020 30 일월)
( 힘내 메일 링리스트 )
doc
: 사용자가 추적 된 파일을 무시하지 않도록 설득
서명자 : Jeff King
서명자 : brian m. 칼슨
사용자가 Git이 추적하는 파일의 변경 사항을 무시하려는 것이 일반적입니다.
이 경우 일반적인 시나리오는 일반적으로 템플릿 메커니즘을 사용하여 추적 된 파일에서 추적 및 생성되지 않아야하는 IDE 설정 및 구성 파일입니다.
그러나 사용자는 변경되지 않은 스킵 워크 스킵 비트에 대해 배우고 어쨌든이를 사용하려고합니다.
이러한 비트가 설정되면 많은 작업이 사용자가 원하는대로 동작하지만 일반적으로 git checkout
파일을 교체해야 할 때 도움이되지 않기 때문에 문제가 됩니다.
이 경우에는 특정 구성 파일과 같은 데이터가 소중하고 때로는 사용자가 폐기하는 것이 무의미한 데이터이기 때문에 합리적인 동작이 없습니다.
이 구성은 지원되는 구성이 아니며 사용자가 의도하지 않은 목적으로 기존 기능을 잘못 사용하여 일반적인 슬픔과 혼란을 유발하기 쉽기 때문에 기존 동작과 문서의 함정을 문서화하여 git update-index
사용자가 대체 솔루션을 탐색해야 함을 알 수 있습니다.
또한 많은 환경에서 성공적으로 사용되는 잘 알려진 방법이 있기 때문에 일반적인 구성 파일 처리에 권장되는 솔루션을 제공합니다.
git update-index
맨 페이지는 이제 포함 :
사용자가 자주 사용하려고 assume-unchanged
및 skip-worktree
추적 파일에 대한 변경 사항을 무시하는 힘내에게 비트를. Git이 특정 작업을 수행 할 때 인덱스에 대해 작업 트리 파일을 계속 검사 할 수 있으므로 예상대로 작동하지 않습니다. 일반적으로 Git은 추적 된 파일의 변경 사항을 무시할 수있는 방법을 제공하지 않으므로 대체 솔루션이 권장됩니다.
예를 들어, 변경하려는 파일이 일종의 구성 파일 인 경우 리포지토리에는 샘플 구성 파일이 포함될 수 있으며이 파일은 무시 된 이름으로 복사되어 수정 될 수 있습니다. 리포지토리에는 샘플 파일을 템플릿으로 취급하여 자동으로 수정 및 복사하는 스크립트가 포함될 수도 있습니다.
마지막 부분은 얼룩 / 깨끗한 스크립트를 기반으로 한 일반적인 콘텐츠 필터 드라이버를 설명하는 것 입니다.
.gitignore
비슷한 목적으로 사용 하고 있습니다. 이 솔루션이 당신에게 효과가 있습니까?