카테고리 보관물: Git

Git

Git에서 파일 추적을 중지하고 파일 변경 사항을 무시하는 방법은 무엇입니까? Git에 의해 추적되거나 패치를 생성 할 때

일부 .csproj파일 이 포함 된 프로젝트를 복제했습니다 . 로컬 csproj파일이 Git에 의해 추적되거나 패치를 생성 할 때 필요하지는 않지만 프로젝트에 분명히 필요합니다.

*.csprojLOCAL에 추가 .gitignore했지만 파일이 이미 저장소에 있습니다.

git status를 입력하면 csproj패치를 추적하거나 제출하고 싶지 않은 변경 사항이 표시 됩니다.

상태를 확인하거나 패치를 만들 때 변경 사항을 볼 수 없도록 개인 저장소에서 이러한 파일의 “추적”을 제거하려면 (그러나 파일을 소스에 보관하십시오) 어떻게해야합니까?

이 상황을 처리하는 올바른 / 정규적인 방법이 있습니까?



답변

git rm --cached수정본 제어에서 제거 할 각 파일을 호출 하면됩니다. 로컬 무시 패턴이 올바른 한 git status 출력에 이러한 파일이 포함되지 않습니다.

이 솔루션은 저장소에서 파일을 제거하므로 모든 개발자는 파일의 로컬 (개정되지 않은 제어) 사본을 유지해야합니다.

git이 이러한 파일의 변경 사항을 감지하지 못하게하려면 다음 명령을 사용해야합니다.

git update-index --assume-unchanged [path]

아마도하고 싶은 일 : (아래 @Ryan Taylor 답변 )

  1. 이것은 git에게 파일이나 폴더의 독립적 인 버전을 원한다는 것을 알리는 것입니다. 예를 들어, 프로덕션 / 스테이징 구성 파일을 덮어 쓰거나 삭제하지 않으려 고합니다.

git update-index --skip-worktree <path-name>

전체 답변은 다음 URL에 있습니다 : http://source.kohlerville.com/2009/02/untrack-files-in-git/


답변

그렇게 git update-index --assume-unchanged file.csproj하면 git은 file.csproj에서 자동으로 변경 사항을 확인하지 않습니다. 변경 할 때마다 git 상태로 변경되지 않습니다. 따라서 모든 .csproj 파일을 이런 식으로 표시 할 수 있지만 업스트림 리포지토리가 보내는 새 파일을 수동으로 표시해야합니다. ( .gitignore또는 .git/info/exclude에 파일이 있으면 생성 한 항목은 무시됩니다.)

나는 .csproj 파일이 무엇인지 완전히 확신하지 못합니다 … IDE 구성 라인 (Eclipse의 .eclipse 및 .classpath 파일과 유사)에 해당하는 경우 소스에서 제어 할 수 없다고 제안합니다. 모두. 반면에, Makefile과 같은 빌드 시스템의 일부인 경우 분명히 선택해야합니다. 그리고 선택적 로컬 변경 사항 (예 : local.csproj a la config.mk)을 선택하는 방법이 유용합니다. : 빌드를 전역 부분과 로컬 재정의로 나눕니다.


답변

3 가지 옵션이 있습니다. 아마도 # 3을 원할 것입니다

1. 이렇게하면 로컬 파일이 유지되지만 다른 사람이 파일을 가져 오면 삭제됩니다.

git rm --cached <file-name> 또는 git rm -r --cached <folder-name>

2. 이것은 많은 파일이있는 폴더와 같은 최적화를위한 것입니다. git은 로컬에 변경 사항이 없을 때마다 변경 사항이 있는지 매번 큰 폴더 확인을 중지하도록 지시합니다. assume-unchanged(당길 때) 지수는 파일 / 폴더 상류 변경이있는 경우 덮어 리셋 및 파일 (들)입니다.

git update-index --assume-unchanged <path-name>

3. 이것은 git에게 파일이나 폴더의 독립적 인 버전을 원한다는 것을 알리기위한 것입니다. 예를 들어, 프로덕션 / 스테이징 구성 파일을 덮어 쓰거나 삭제하지 않으려 고합니다.

git update-index --skip-worktree <path-name>

git과 함께 git update-index 전파되지 않으며 각 사용자가 독립적으로 실행해야 한다는 것을 알아야합니다 .


답변

이것은 2 단계 프로세스입니다.

  1. 파일 / 폴더 추적을 제거하되 디스크에 보관하십시오.

    git rm --cached
    

    이제 그들은 “변경된”것으로 나타나지 않지만 여전히

        untracked files in  git status -u
    
  2. 에 추가 .gitignore


답변

수락 된 답변이 여전히 효과가 없었습니다.

나는 사용했다

git rm -r –cached.

git add.

git commit -m “.gitignore 수정”

여기 에서 답을 찾았습니다


답변

.gitignore를 잊었습니까?

전체 프로젝트를 로컬로 가지고 있지만 git ignore를 추가하지 않고 이제 불필요한 파일을 추적하는 경우이 명령을 사용하여 모든 것을 제거하십시오

git rm --cached -r .

프로젝트의 루트에 있는지 확인하십시오.

그럼 평소에 할 수 있습니다

더하다

git add .

범하다

git commit -m 'removed all and added with git ignore'

푸시

git push origin master

결론

이것이 변경을 .gitignore하거나 함께 잊어 버린 사람들에게 도움이 되기를 바랍니다.

  • 전체 캐시를 제거합니다
  • 당신의 .gitignore를 본다
  • 추적하려는 파일을 추가합니다
  • 당신의 레포로 밀어

답변

다른 답변에서 지적했듯이 선택한 답변이 잘못되었습니다.

대답 다른 질문은 필요한 것 스킵-worktree 수 있음을 시사한다.

git update-index --skip-worktree <file>