자식 저장소에서 디렉토리를 제거하는 방법?


1232

내 GitHub 저장소에 2 개의 디렉토리가 있습니다. 그중 하나를 삭제하고 싶습니다. 전체 저장소를 삭제하고 다시 작성하지 않고 어떻게 할 수 있습니까?


1
디렉토리에 파일이 있습니까?
Fred Foo

3
@Iarsmans : 예 6 개 파일. 하나는 대문자이고 다른 하나는 소문자를 제외하고 두 디렉토리는 동일합니다.
Sahat Yalkabov

답변:


2322

자식과 로컬에서 디렉토리를 제거

두 디렉토리 모두에서 '마스터'를 체크 아웃 할 수 있습니다.

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에서 디렉토리를 제거하지만 로컬은 아닙니다.

주석에서 언급했듯이 일반적으로 git 에서이 디렉토리를 제거하지만 파일 시스템에서 완전히 삭제하지는 않습니다 (local)

이 경우 다음을 사용하십시오.

git rm -r --cached myFolder

8
나는 똑같은 상황을 겪었다. 내가 그것을 시도했을 때 git rm -r myFolder뿐만 아니라 "MyFolder"디렉토리에서 모든 것을 삭제했습니다. "MyFolder"디렉토리의 모든 것을 되돌리고 커밋했습니다.
저스틴

240
@Justin git에서만 제거하고 파일 시스템을있는 그대로 두려면git rm -r --cached myFolder
karmakaze at

32
내가 얻는 오류 메시지는 : 치명적 : pathspec 'directory'가 파일과 일치하지 않습니다.
user2441441

3
@ user2441441 저장소에 전혀 추가되지 않은 폴더 / 파일을 제거하려고 할 때이 오류가 발생했습니다.
lukeatdesignworks

3
git rm -r --cached directory/추적 된 자식에서만 제거하지만 저장소 구조는 남아 있습니다.
Néstor

287

로컬 디렉토리가 아닌 git 저장소에서만 폴더 / 디렉토리를 제거하려면 간단한 3 가지 명령을 시도하십시오.


디렉토리를 제거하는 단계

git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master

다음 커밋에서 해당 폴더를 무시하는 단계

다음 커밋에서 해당 폴더를 무시하려면 .gitignore 라는 루트에 하나의 파일을 만들고 해당 폴더 이름을 넣으십시오. 원하는만큼 넣을 수 있습니다

.gitignore 파일은 다음과 같습니다

/FolderName

디렉토리를 제거


1
또한 다른 컴퓨터에서 git rm -r --cached FolderName git commit -m "저장소에서 제거 된 폴더"를 수행 한 다음 동기화를 유지하기 위해 풀을 수행해야합니다.
Simon

1
지금까지 저장소에 추가 된 지점에서 디렉토리가 삭제됩니까? 아니면 디렉토리를 제거하고 .git 저장소에 다시 커밋하는 것입니까?
alpha_989

1
큰! 일!
BeingCoders

2
잘 설명, 좋은 대답
Rakshit Shah

1
잘 했어. 내 컴퓨터에서 세 번째 단계가 작동하지 않습니다. 그러나 $ git push로 변경되면 작동합니다.
Hong

82

어떤 이유로 karmakaze가 말한 것이 작동하지 않으면 파일 시스템 브라우저를 사용하거나 파일 시스템 브라우저 (예 : Windows 파일 탐색기)를 사용하여 원하는 디렉토리를 삭제하십시오. : 디렉토리 삭제 명령을 실행 한 후
git add -A
다음과
git commit -m 'deleting directory'
다음
git push origin master.


4
이것은 나를 위해 일했습니다. -A 인수를 설명해 주시겠습니까?
Arun

2
@Arun -A는 --all의 약자이며 모든 추적 및 추적되지 않은 파일의 변경 사항을 추가합니다
Joachim Rohde

이것은 나를 위해 일했습니다.
UVM

20

당신은 이것을 시도 할 수 있습니다 : git rm -rf <directory_name>

디렉토리를 강제로 삭제합니다.


3
이것은 또한 로컬 디렉토리에서 삭제됩니다
abdul rehman kk

18

디렉토리에서 파일을 제거하면 ( git rm다른 답변이 설명하는 것처럼) git과 관련하여 디렉토리가 더 이상 존재하지 않습니다. 빈 디렉토리를 커밋하거나 제거 할 수 없습니다.

이것은 당신이 명시 적으로 해야하는 subversion과는 달리 svn rm emptyfolder/우연히 mangit 페이지가 "멍청한 내용 추적기"라고 설명 하는 이유입니다.

에 대한 대답은 "어떻게 자식 저장소에 빈 디렉토리를 추가하려면" 받는 링크 이 주제에 대한 FAQ :

현재 git index (스테이징 영역)의 디자인은 파일을 나열하는 것만 허용하며 빈 디렉토리를 허용하도록 변경 할만 큼 유능한 사람은 아무도이 상황을 해결하기에 충분하지 않았습니다.

디렉토리는 파일을 추가 할 때 자동으로 추가됩니다. 즉, 디렉토리를 저장소에 추가 할 필요가 없으며 자체적으로 추적되지 않습니다.

" git add <dir>" 라고 말하면 거기에 파일이 추가됩니다.

체크 아웃에 디렉토리가 실제로 필요한 경우 파일을 작성해야합니다. .gitignore는이 목적에 적합합니다. 비워 두거나 디렉토리에 표시 될 파일 이름을 채울 수 있습니다.


8

이미 폴더를 커밋했으며 기록에서 디렉토리를 제거하고 싶습니다.

나는 다음을 수행했다.

폴더를 추가 .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에서 제거되었지만 로컬 디스크에서는 삭제되지 않았습니다.


7

빈 폴더 삭제

내가 만든 빈 디렉토리 (폴더)를 삭제하고 싶었습니다 .Git이 빈 디렉토리를 추적하지 않는다는 것을 알게 된 후 git에서 삭제할 수 없습니다. 작업 트리에 빈 디렉토리가 있으면 간단히 디렉토리를 제거해야합니다.

rm -r folderName

Git을 포함 할 필요가 없습니다.


1
감사! 그게 내가 필요한 것입니다.
SpyrosKo

6

git Directory로 이동 한 후 다음 명령을 입력하십시오. rm -rf < Directory Name >

디렉토리를 삭제 한 후 다음과 같이 변경 사항을 커밋합니다. git commit -m "You Commit Message"

그런 다음 원격 GIT 디렉토리에서 변경 사항을 푸시하십시오. git push origin < Branch name >


4

다음과 같이 폴더를 로컬로 삭제 한 후 누를 수 있습니다.

git rm -r folder_name
git commit -m "your commit"
git push origin master

4

나는 보통 git add --all원격 저장소에서 파일 / 폴더를 제거 하는 데 사용 합니다.

rm -r folder_name
git add --all
git commit -m "some comment"
git push origin master

master 저장소의 다른 분기로 대체 할 수 있습니다.



1

제 동료 중 한 명이 BFG Repo-Cleaner 를 강력하게 제안했습니다 . 원치 않는 데이터를 삭제할뿐만 아니라 관련 커밋 정보에서 리포지토리를 정리합니다.


1

새 디렉토리를 추가하려면 다음을 수행하십시오.

mkdir <YOUR-DIRECTORY>

그러나 Git은 디렉토리가 아닌 파일을 추적하기 때문에 Git은이 새로운 디렉토리를 인식하지 못합니다. DIRECTORY

git status

Git은 변경 사항을 인식하지 못하므로 숨겨진 .keep파일을 추가 하여 Git이이 새로운 변경 사항을 인식하도록합니다.

touch /YOUR-directory/.keep

이제 git statusGit을 누르면 변경 사항을 알 수 있습니다.

디렉토리를 삭제하려면이 명령을 사용해야합니다.

rm -r <YOUR-DIRECTORY>

그리고를 사용하여 git status확인하면 디렉토리가 제거 된 것을 볼 수 있습니다.


0

첫 번째 git 명령은 무엇을 삭제하기 전에 누구인지 알아야합니다.

  1. 자식 초기화
  2. 자식 설정 user.name "someone"
  3. 자식 설정 user.email "someone@someplace.com"
  4. 자식 rm -r
  5. git commit -m "디렉토리 삭제"
  6. 자식 푸시 원점 마스터

0

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.