내 GitHub 저장소에 2 개의 디렉토리가 있습니다. 그중 하나를 삭제하고 싶습니다. 전체 저장소를 삭제하고 다시 작성하지 않고 어떻게 할 수 있습니까?
내 GitHub 저장소에 2 개의 디렉토리가 있습니다. 그중 하나를 삭제하고 싶습니다. 전체 저장소를 삭제하고 다시 작성하지 않고 어떻게 할 수 있습니까?
답변:
두 디렉토리 모두에서 '마스터'를 체크 아웃 할 수 있습니다.
git rm -r one-of-the-directories // This deletes from filesystem
git commit . -m "Remove duplicated directory"
git push origin <your-git-branch> (typically 'master', but not always)
주석에서 언급했듯이 일반적으로 git 에서이 디렉토리를 제거하지만 파일 시스템에서 완전히 삭제하지는 않습니다 (local)
이 경우 다음을 사용하십시오.
git rm -r --cached myFolder
git rm -r myFolder
뿐만 아니라 "MyFolder"디렉토리에서 모든 것을 삭제했습니다. "MyFolder"디렉토리의 모든 것을 되돌리고 커밋했습니다.
git rm -r --cached myFolder
git rm -r --cached directory/
추적 된 자식에서만 제거하지만 저장소 구조는 남아 있습니다.
디렉토리를 제거하는 단계
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master
다음 커밋에서 해당 폴더를 무시하는 단계
다음 커밋에서 해당 폴더를 무시하려면 .gitignore 라는 루트에 하나의 파일을 만들고 해당 폴더 이름을 넣으십시오. 원하는만큼 넣을 수 있습니다
.gitignore 파일은 다음과 같습니다
/FolderName
어떤 이유로 karmakaze가 말한 것이 작동하지 않으면 파일 시스템 브라우저를 사용하거나 파일 시스템 브라우저 (예 : Windows 파일 탐색기)를 사용하여 원하는 디렉토리를 삭제하십시오. : 디렉토리 삭제 명령을 실행 한 후
git add -A
다음과
git commit -m 'deleting directory'
다음
git push origin master
.
당신은 이것을 시도 할 수 있습니다 :
git rm -rf <directory_name>
디렉토리를 강제로 삭제합니다.
디렉토리에서 파일을 제거하면 ( git rm
다른 답변이 설명하는 것처럼) git과 관련하여 디렉토리가 더 이상 존재하지 않습니다. 빈 디렉토리를 커밋하거나 제거 할 수 없습니다.
이것은 당신이 명시 적으로 해야하는 subversion과는 달리 svn rm emptyfolder/
우연히 man
git 페이지가 "멍청한 내용 추적기"라고 설명 하는 이유입니다.
에 대한 대답은 "어떻게 자식 저장소에 빈 디렉토리를 추가하려면" 받는 링크 이 주제에 대한 FAQ :
현재 git index (스테이징 영역)의 디자인은 파일을 나열하는 것만 허용하며 빈 디렉토리를 허용하도록 변경 할만 큼 유능한 사람은 아무도이 상황을 해결하기에 충분하지 않았습니다.
디렉토리는 파일을 추가 할 때 자동으로 추가됩니다. 즉, 디렉토리를 저장소에 추가 할 필요가 없으며 자체적으로 추적되지 않습니다.
"
git add <dir>
" 라고 말하면 거기에 파일이 추가됩니다.체크 아웃에 디렉토리가 실제로 필요한 경우 파일을 작성해야합니다. .gitignore는이 목적에 적합합니다. 비워 두거나 디렉토리에 표시 될 파일 이름을 채울 수 있습니다.
이미 폴더를 커밋했으며 기록에서 디렉토리를 제거하고 싶습니다.
나는 다음을 수행했다.
폴더를 추가 .gitignore
:
echo Folder_Name/ >> .gitignore
모든 커밋에서 제거하십시오.
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all
이전 커밋에서 심판을 제거하십시오.
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
모든 오래된 심판이 완전히 제거되었는지 확인하십시오
rm -Rf .git/logs .git/refs/original
가비지 수집 수행
git gc --prune=all --aggressive
온라인 저장소로 변경 사항을 푸시하십시오.
git push
당신은 여기에 있습니다.
그러나 다음을 통해 모든 변경 사항을 모든 지점에 적용 할 수 있습니다. 그러나이 명령에주의하십시오!
git push origin --all --force
git push origin --tags --force
그 후 폴더는 git에서 제거되었지만 로컬 디스크에서는 삭제되지 않았습니다.
Attlasian 소스 트리 (Windows) ( https://www.atlassian.com/software/sourcetree/overview )를 사용할 수 있습니다 . 트리에서 파일을 선택하고 상단의 "제거"버튼을 누르십시오. 로컬 저장소 및 로컬 자식 데이터베이스에서 파일이 삭제됩니다. 그런 다음 커밋하고 밉니다.
제 동료 중 한 명이 BFG Repo-Cleaner 를 강력하게 제안했습니다 . 원치 않는 데이터를 삭제할뿐만 아니라 관련 커밋 정보에서 리포지토리를 정리합니다.
새 디렉토리를 추가하려면 다음을 수행하십시오.
mkdir <YOUR-DIRECTORY>
그러나 Git은 디렉토리가 아닌 파일을 추적하기 때문에 Git은이 새로운 디렉토리를 인식하지 못합니다. DIRECTORY
git status
Git은 변경 사항을 인식하지 못하므로 숨겨진 .keep
파일을 추가 하여 Git이이 새로운 변경 사항을 인식하도록합니다.
touch /YOUR-directory/.keep
이제 git status
Git을 누르면 변경 사항을 알 수 있습니다.
디렉토리를 삭제하려면이 명령을 사용해야합니다.
rm -r <YOUR-DIRECTORY>
그리고를 사용하여 git status
확인하면 디렉토리가 제거 된 것을 볼 수 있습니다.
2 가지 답변의 조합이 나를 위해 일했습니다.
git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push
여전히 경고가 표시되면 파일을 수동으로 제거하십시오.
git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push