업스트림 변경 사항이 있어도 특정 파일을 그대로 유지하면서 git 프로젝트를 안전하게 업데이트 (풀)하는 방법은 무엇입니까?
myrepo / config / config.php
이 파일이 원격에서 변경 되더라도 git pull을 사용할 때 다른 모든 것이 업데이트되지만이 파일은 변경되지 않고 병합되지 않는 방법이 있습니까?
추신. git 기반 배포 스크립트 만 작성하기 때문에 내가 원하는 것을해야합니다. 구성 파일을 템플릿으로 변경할 수 없습니다.
따라서 로컬로 변경된 내용을 잃지 않는 업데이트 스크립트를 작성하는 방법이 필요합니다. 나는 다음과 같은 간단한 것을 원했습니다.
git assume-remote-unchanged file1
git assume-remote-unchanged file2
그때 git pull
답변
Git 숨김을 기반으로하는 간단한 솔루션이 있습니다. 변경 한 내용을 모두 숨기고 모든 새로운 내용을 가져와 숨김을 적용하십시오.
git stash
git pull
git stash pop
숨김 팝에서 충돌이있을 수 있습니다. 당신이 묘사하는 경우에 실제로 충돌이 생길 것입니다 config.php
. 그러나, 당신이 은닉에 넣은 것이 당신이 원하는 것임을 알기 때문에 갈등을 해결하는 것은 쉽습니다. 이렇게하십시오 :
git checkout --theirs -- config.php
답변
저장소에 대부분의 풀러가 사용자 정의 해야하는 파일이 있으면 파일의 이름을 바꾸고에 config.php.template
추가 config.php
하십시오 .gitignore
.
답변
업데이트 : 이것은 문자 그대로 질문에 대답하지만 KurzedMetal의 대답 은 실제로 당신이 원하는 것이라고 생각 합니다.
가정 :
- 당신은 지점에있어
master
- 상류 지점 인
master
에origin
- 커밋되지 않은 변경 사항이 없습니다.
…. 할 수있는 일 :
# Do a pull as usual, but don't commit the result:
git pull --no-commit
# Overwrite config/config.php with the version that was there before the merge
# and also stage that version:
git checkout HEAD config/config.php
# Create the commit:
git commit -F .git/MERGE_MSG
자주 수행해야하는 경우 별명을 작성할 수 있습니다. 커밋되지 않은 변경 사항이있는 경우 변경 사항이 취소 config/config.php
됩니다.
답변
rebase로 git pull을 시도 할 수도 있습니다.
git pull --rebase origin dev
답변
질문에 대답하려면 : 체크 아웃의 특정 파일을 제외하려면 스파 스 체크 아웃을 사용할 수 있습니다
1) .git/info/sparse-checkout
에서 보관할 대상을 정의하십시오. 여기서 우리는 모두 (*)를 원하지만 (느낌표에주의하십시오) config.php :
/*
!/config.php
2) 자식에게 스파 스 체크 아웃을 고려하고 싶다고 말하십시오.
git config core.sparseCheckout true
3)이 파일을 로컬에 이미 가지고 있다면, git이 스파 스 체크 아웃에서 수행하는 작업을 수행하십시오 ( “skip-worktree”플래그를 설정하여이 파일을 제외시켜야 함).
git update-index --skip-worktree config.php
4) config.php 파일이있는 저장소를 사용하십시오-저장소의 변경 사항이 무엇이든간에.
구성 값은 소스 제어에 있지 않아야합니다.
- 잠재적 인 보안 위반입니다
- 배포시 이와 같은 문제가 발생합니다.
이것은 당신이 그것들을 배제하고 (첫 커밋 전에 .gitignore에 넣어야 함) 앱을 체크 아웃하는 각 인스턴스에 적절한 파일을 생성해야합니다 ( “템플릿”파일을 복사하고 수정하여)
git이 파일을 담당하면 .gitignore는 아무런 영향을 미치지 않습니다.
파일이 소스 제어하에 있으면 두 가지 선택 만 할 수 있습니다.-파일을 제거하기 위해 모든 히스토리를 리베이스 ( git filter-branch
-)-파일을 제거하는 커밋을 작성하십시오. 그것은 잃어버린 전투와 싸우는 것과 같지만 때로는 그와 함께 살아야합니다.
답변
커밋되지 않은 로컬 변경 사항 인 경우 당기는 동안 병합 충돌을 피하십시오.
git stash save
git pull
git stash pop
참조-https: //happygitwithr.com/pull-tricky.html