programing

이미 많은 수의 파일을 추적하고 있는 기존 리포지토리에 .gitignore 적용

muds 2023. 5. 1. 22:05
반응형

이미 많은 수의 파일을 추적하고 있는 기존 리포지토리에 .gitignore 적용

저장소에 기존 Visual Studio 프로젝트가 있습니다.저는 최근에 제 프로젝트 아래에 .gitignore 파일을 추가했는데 Git에게 파일에 나열된 파일을 무시하라고 말하는 것 같습니다.

제 문제는 그 모든 파일들이 이미 추적되고 있다는 것이고 제가 아는 한 Git는 이 파일에 무시하기 위해 규칙이 추가되기 전에 이미 추적된 파일을 무시하지 않을 것입니다.

다음을 사용하도록 제안되었습니다.git rm --cached수동으로 추적을 해제하지만 하나씩 확인하는 데는 시간이 오래 걸릴 것입니다.

저장소를 삭제하고 다시 만들까 생각했는데 이번에는 .gitignore 파일이 있는 상태에서 더 나은 방법이 있을 것입니다.

대답은 제 문제를 해결했습니다.

우선 보류 중인 모든 변경 사항을 커밋합니다.

그런 다음 다음 명령을 실행합니다.

git rm -r --cached .

이렇게 하면 인덱스에서 모든 항목이 제거되고 다음을 실행합니다.

git add .

커밋:

git commit -m ".gitignore is now working"

이 파일을 리포지토리에 밀어넣고 다른 곳에서 해당 파일이 계속 추적되는 상태로 끌어넣으면 파일이 삭제됩니다.

  1. .gitignore 파일을 만들기 때문에 빈 .txt 파일을 만들기만 하면 됩니다.

  2. 그런 다음 cmd에 다음 행을 적으면서 이름을 변경해야 합니다(여기서).git.txt방금 만든 파일의 이름입니다):

rename git.txt .gitignore

  1. 그런 다음 파일을 열고 무시하고 싶은 추적되지 않은 파일을 모두 쓸 수 있습니다.예를 들어, 내 것은 다음과 같습니다.
    #OS junk files
    [Tt]humbs.db
    *.DS_Store
    
    #Visual Studio files
    *.[Oo]bj
    *.user
    *.aps
    *.pch
    *.vspscc
    *.vssscc
    *_i.c
    *_p.c
    *.ncb
    *.suo
    *.tlb
    *.tlh
    *.bak
    *.[Cc]ache
    *.ilk
    *.log
    *.lib
    *.sbr
    *.sdf
    *.pyc
    *.xml
    ipch/
    obj/
    [Bb]in
    [Dd]ebug*/
    [Rr]elease*/
    Ankh.NoLoad
    
    #Tooling
    _ReSharper*/
    *.resharper
    [Tt]est[Rr]esult*
    
    #Project files
    [Bb]uild/
    
    #Subversion files
    .svn
    
    # Office Temp Files
    ~$*

GitHub의 유용한 .gitignore 파일 모음이 있습니다.

  1. 이 파일이 있으면 다른 파일과 마찬가지로 Git 저장소에 추가해야 하며 저장소 루트에만 있어야 합니다.

  2. 그런 다음 단말기에 다음 행을 작성해야 합니다.

git config --global core.excludesfile ~/.gitignore_global

공식 문서:

시스템의 모든 Git 저장소에 있는 파일을 무시하기 위한 규칙 목록인 글로벌 .gitignore 파일을 생성할 수도 있습니다.예를 들어 ~/.gitignore_global에 파일을 생성하고 여기에 몇 가지 규칙을 추가할 수 있습니다.

터미널을 엽니다.터미널에서 git config --global core.excludes file ~/.gitignore_global 명령을 실행합니다.

리포지토리가 이미 있는 경우 다음 명령을 실행해야 합니다.

git rm -r --cached .
git add .
git commit -m ".gitignore is now working"

2단계가 작동하지 않으면 추가할 파일의 구멍 경로를 작성해야 합니다.

여기에 지정된 대로 인덱스를 업데이트할 수 있습니다.

git update-index --assume-unchanged /path/to/file

이렇게 하면 파일이 다음에 표시되지 않습니다.git status또는git diff.

파일 추적을 다시 시작하려면 다음을 실행합니다.

git update-index --no-assume-unchanged /path/to/file

추가한 경우.gitignore너무 늦었습니다. Git는 이미 커밋된 파일을 계속 추적할 것입니다.이 문제를 해결하려면 항상 원하지 않는 파일의 캐시된 모든 인스턴스를 제거할 수 있습니다.

먼저 실제로 추적 중인 파일을 확인하려면 다음을 실행합니다.

git ls-tree --name-only --full-tree -r HEAD

다음과 같은 디렉터리에서 원하지 않는 파일을 발견했다고 가정해 보겠습니다.cache/따라서 모든 파일 대신 해당 디렉터리를 대상으로 지정하는 것이 더 안전합니다.

그래서 대신에:

git rm -r --cached .

원하지 않는 파일 또는 디렉터리를 대상으로 지정하는 것이 더 안전합니다.

git rm -r --cached cache/

그런 다음 모든 변경 사항을 추가합니다.

git add .

그리고 커밋...

git commit -m ".gitignore is now working"

참조: https://amyetheredge.com/code/13.html

다음은 현재 제외 패턴 집합에서 무시되는 파일을 "추적 해제"하는 한 가지 방법입니다.

(GIT_INDEX_FILE=some-non-existent-file \
git ls-files --exclude-standard --others --directory --ignored -z) |
xargs -0 git rm --cached -r --ignore-unmatch --

이렇게 하면 파일이 작업 디렉토리에 남아 있지만 인덱스에서 제거됩니다.

여기서 사용되는 트릭은 gits-files에 존재하지 않는 인덱스 파일을 제공하여 추적된 파일이 없다고 생각하도록 하는 것입니다.위의 셸 코드는 인덱스가 비어 있으면 무시될 모든 파일을 요청한 다음 gitm을 사용하여 실제 인덱스에서 제거합니다.

파일이 "추적 해제"된 후 git status를 사용하여 중요한 항목이 제거되지 않았는지 확인합니다(제거 패턴을 조정하고 git reset -- 경로를 사용하여 제거된 인덱스 항목을 복원).그런 다음 "쓰레기"를 제외한 새로운 약속을 하십시오.

"잔인함"은 여전히 오래된 커밋에 있을 것입니다.깨끗한 기록이 정말로 필요한 경우 git filter-branch를 사용하여 이전 커밋의 깨끗한 버전을 생성할 수 있습니다(예: git filter-branch를 사용하면 "history"를 다시 작성할 수 있으므로 "crud"가 처음 도입된 후 기록 커밋을 끌어낸 공동작업자가 있는 경우 가볍게 처리해서는 안 됩니다).

사용하다git clean
이 실행에 대한 도움말 보기

git clean -h

먼저 어떤 일이 발생하는지 확인하려면 -n 스위치를 통과하여 모의 실행을 수행해야 합니다.

git clean -xn

Giting nored 가비지 제거 방법

git clean -xdf

주의:데이터베이스와 같은 로컬 구성 파일을 무시하고 있을 수 있습니다.yml도 제거됩니다.사용자의 책임 하에 사용하십시오.

그리고나서

git add .
git commit -m ".gitignore is now working"
git push

이것이 기존 저장소에 .gitignore 파일을 추가하는 쉬운 방법이라고 생각합니다.

필수 구성 요소:

Github 계정에 액세스하려면 브라우저가 필요합니다.

스텝

  1. 필요한(기존) 프로젝트에 새 파일을 만들고 이름을 .gitignore로 지정합니다.파일 이름을 .gitignore로 지정하면 .gitignore 템플릿에 대한 유용한 프롬프트가 나타납니다.이러한 템플릿을 사용하거나 gitignore.io 을 사용하여 gitignore 파일의 내용을 생성합니다.
  2. 변경 내용을 커밋합니다.
  3. 이제 이 리포지토리를 복제합니다.

재미있게 보내!

언급URL : https://stackoverflow.com/questions/19663093/apply-gitignore-on-an-existing-repository-already-tracking-large-number-of-file

반응형