2016-11-01 6 views
0

나의 시나리오가있다. 나는 지점 A에 있었는데, 여기서 나는 나의 로컬 작업 카피의 특정 파일을 약간 변경했다.힘내 사귀기가 작동하지 않는다.

  1. 완전히이 파일의 변경 사항을 무시 :

    /launcher/file.esb 나는 기본적으로 다음과 같은합니다. 나는 이것을 달성했다. assum-unchanged

  2. .gitignore를 사용하여이 파일을 버전 관리에서 제거했다.

  3. 로컬 작업 폴더에서이 파일의 변경 사항을 유지하면서 다른 분기를 체크 아웃합니다. A-> Develop-> B-> C 등 ...

내가 달성 할 수없는 오전 # 3. 새로운 브랜치를 체크 아웃하고 풀을 실행하자마자 이전의 변경 사항을 파일에 덮어 씁니다.

왜 이런 일이 발생합니까? 이 파일 경로를 .gitignore에 포함시키지 않으면 효과적으로이 파일을 버전 제어 촉수에서 완전히 벗어날 수 있습니까?

어떻게 3 위를 달성 할 수 있습니까?

이 질문은 "중복 가능"링크에서 언급 한 질문과 다릅니다. Heres why :

기본적으로 내가 원하는 단어입니다. "이 하나의 특정 파일을 본질적으로 '셸'에 넣으십시오.이 파일은 어떤 자식 작업 중에도 덮어 쓰지 않으며 변경된 경우 고려되지 않습니다." 기본적으로 해당 파일과 준비/원격 사이의 버전 제어 동기화 형식을 제외합니다. 이 로컬 파일과 staging/remote의 버전은 상호 연결 및 전체 연결 해제 상태 여야합니다.

+0

[Git에서 파일 변경 내용을 추적하고 무시하는 행위] 가능한 복제본 (http://stackoverflow.com/questions/936249/stop-tracking-and-ignore-changes-to-a-file-in-git)) –

답변

4

파일이 이미 저장소에 포함되어 있기 때문에 이러한 현상이 발생합니다. 따라서 브랜치를 전환 할 때 체크 아웃중인 브랜치에서이 파일의 버전을 얻습니다. gitignore 파일은 단지 저장소에 포함되지 않은 파일을 보지 못하게합니다. 이 작업은 완료되었으므로 git add . 또는 git commit -a과 같은 명령에는 특정 파일이 포함되지 않습니다. 그리고 변경되지 않은 옵션을 사용하면 변경 사항을 볼 수 없지만, Git은 파일이 커밋 된 버전과 다를 바가 없으므로 체크 아웃시 파일을 덮어 쓸 수 있습니다.

원하는 파일을 자식 컨트롤에서 제거하고 변경 내용을 직접 관리하는 경우 git rm --cached /launcher/file.esb을 사용하고 변경 내용을 적용 할 수 있습니다. 그러면 색인에서이 파일이 제거되고 파일은 더 이상 git에 의해 추적되지 않습니다. --cached 옵션을 사용하면 git이 실제로 작업 디렉토리에서 파일을 제거하지 못하게 할 수 있습니다. 한 브랜치에서 파일을 제거해도 다른 브랜치에서 제거되지 않기 때문에 각 브랜치에 대해 별도로이 작업을 수행해야 할 수도 있습니다. 이렇게하려면 가정을 변경하지 않고 실행 취소하고 git stash 명령을 사용하여 일시적으로 로컬 변경 사항을 숨길 수 있습니다.

+0

git rm --cached, 나는 그것을 수백만 번 시도했습니다. 문제는 git rm'd 파일을 커밋하고 브랜치를 원점으로 푸시하면 그 파일이 PR 중에 "삭제됨"으로 표시된다는 것입니다. 해당 분기를 개발과 병합하려고하면 해당 파일이 Dev에서 실제로 제거됩니까? 두 경우 모두 그 파일이 PR 중에 제거 된 것처럼 나타나 곤경에 처하게됩니다. – Ace

+0

기본적으로 나는 평범한 말로 원하는 것을 가지고 있습니다. "이 하나의 특정 파일을 본질적으로 '셸'에 넣으십시오.이 파일은 어떤 자식 작업 중에도 덮어 쓰지 않으며 변경된 경우 고려되지 않습니다." 기본적으로 해당 파일과 준비/원격 사이의 버전 제어 동기화 형식을 제외합니다. 이 로컬 파일과 staging/remote의 버전은 상호 연결 및 전체 연결 해제 상태 여야합니다. – Ace

+0

내가 아는 한, 원하는 것을하는 표준 방법이 없습니다. 'git pull '을 할 때 기본적으로 원격 저장소를 로컬에 병합합니다 ('git pull '은 기본적으로'git fetch'와'git merge'에 대한 바로 가기입니다). 따라서 파일이 리모컨으로 제어되면 당겨서 로컬로 병합됩니다. 간단한 해결책은 'git pull'을하기 전에'git stash'를하고 그 후에'git stash pop'을하는 것입니다. 그래서 지역 변경 사항이 남아있게됩니다. 파일이 충돌을 일으킬 수있는 방식으로 다른 사람에 의해 변경되지 않는 한 잘 작동해야합니다. –

1

.gitignore를 사용하여이 파일을 버전 관리에서 제거하십시오.

시도했지만 실패했습니다. .gitignore은 색인을 업데이트 할 때, 즉 다음 커밋을 준비 할 때만 읽혀집니다.파일이 이미 커밋 된 경우 .gitignore에 추가하면 Git에 파일 추적을 중지하는 데 도움이되지 않습니다.

색인에서 ([git rm --cached](https://git-scm.com/docs/git-rm)을 (를) 사용하여) 제거하고 변경 사항을 커밋해야합니다. 그런 다음 Git은 파일 추적을 중지합니다. .gitignore에 이름을 추가하면 의 출력에있는 Untracked files 섹션에 정보가 나열되지 않습니다.

그러나 repo에서 파일을 제거하기 전에 작성한 커밋을 체크 아웃하면 커밋에 파일이 포함되고 Git도 체크 아웃을 시도합니다.

관련 문제