답변:
.gitignore
파일 의 규칙은 추적되지 않은 파일에만 적용됩니다. 해당 디렉토리 아래의 파일은 이미 저장소에서 커밋되었으므로 파일을 스테이지 해제하고 커밋을 생성 한 다음 GitHub에 푸시해야합니다.
git rm -r --cached some-directory
git commit -m 'Remove the now ignored directory "some-directory"'
git push origin master
리포지토리의 기록을 다시 쓰지 않고 기록에서 파일을 삭제할 수 없습니다. 다른 사람이 리포지토리를 사용하거나 여러 컴퓨터에서 파일을 사용하는 경우이 작업을 수행해서는 안됩니다. 그래도이 작업을 수행 git filter-branch
하려면 기록을 다시 작성하는 데 사용할 수 있습니다 . 여기에 유용한 안내서가 있습니다 .
또한 출력은 git rm -r --cached some-directory
다음과 같습니다.
rm 'some-directory/product/cache/1/small_image/130x130/small_image.jpg'
rm 'some-directory/product/cache/1/small_image/135x/small_image.jpg'
rm 'some-directory/.htaccess'
rm 'some-directory/logo.jpg'
는 rm
저장소에 대한 자식 피드백이고; 파일은 여전히 작업 디렉토리에 있습니다.
-r
하고 --cached
. 감사.
-r
전체 디렉토리를 수행하는 경우 재귀 적임을 의미합니다. --cached
우선 자식의 정상적인 작업 디렉토리에서 삭제의 행동 과 커밋에 대한 삭제를 준비하고, 차종은 투입에 대한 준비가 준비 영역에서 작동에만 이눔 아. git에게 파일의 로컬 사본을 보관하고 싶다고 말하는 방법입니다.
git reset name_of_file
위에 설명 된 내용이 작동하려면
나는 이것을한다:
git rm --cached `git ls-files -i --exclude-from=.gitignore`
git commit -m 'Removed all files that are in the .gitignore'
git push origin master
git에있는 모든 파일 / 폴더를 무시하고 무시하고 수동으로 하나씩 선택해야합니다.
이것은 나를 위해 일을 중단 한 것으로 보입니다.
git rm -r --cached .
git add .
git commit -m 'Removed all files that are in the .gitignore'
git push origin master
foreach ($i in iex 'git ls-files -i --exclude-from=.gitignore') { git rm --cached $i }
내 대답에 따라 여기 : git 저장소에서 디렉토리를 제거하는 방법은 무엇입니까?
디렉토리를 제거하는 단계
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master
다음 커밋에서 해당 폴더를 무시하는 단계
다음 커밋에서 해당 폴더를 무시하려면 .gitignore 라는 루트에 하나의 파일을 만들고 해당 폴더 이름을 폴더에 넣으십시오. 원하는만큼 넣을 수 있습니다
.gitignore 파일은 다음과 같습니다
/FolderName
Blundell의 첫 번째 대답은 저에게 효과적이지 않았습니다. 그러나 그것은 올바른 길을 보여주었습니다. 나는 이와 같은 일을했다 :
> for i in `git ls-files -i --exclude-from=.gitignore`; do git rm --cached $i; done
> git commit -m 'Removed all files that are in the .gitignore'
> git push origin master
아래 명령문을 실행하여 먼저 삭제할 파일을 확인하는 것이 좋습니다.
git ls-files -i --exclude-from=.gitignore
Visual Studio에 기본 .gitignore 파일을 사용하고 있었고 프로젝트에서 의도 한 작업이 아닌 모든 로그 및 bin 폴더를 제거하고 있음을 알았습니다.
참고 :이 솔루션은 Github Desktop GUI 에서만 작동합니다 .
Github Desktop GUI 를 사용 하면 매우 간단합니다.
폴더를 다른 위치 (프로젝트 폴더 외부)로 임시로 이동하십시오.
.gitignore
파일을 편집 하고 github 페이지에서 마스터 저장소를 제거 할 폴더 항목을 제거하십시오.
프로젝트 폴더를 커밋하고 동기화하십시오.
폴더를 프로젝트 폴더로 이동하십시오.
.gitignore
파일을 다시 편집 하십시오.
그게 다야.
Blundell의 답변은 효과가 있지만 기괴한 이유로 나와 관련이 없습니다. 첫 번째 명령으로 출력 된 파일 이름을 파일로 먼저 파이프 한 다음 해당 파일을 반복하고 해당 파일을 하나씩 삭제해야했습니다.
git ls-files -i --exclude-from=.gitignore > to_remove.txt
while read line; do `git rm -r --cached "$line"`; done < to_remove.txt
rm to_remove.txt
git commit -m 'Removed all files that are in the .gitignore'
git push origin master
이 방법은 표준 .gitignore 동작을 적용 하며 무시해야 할 파일을 수동으로 지정할 필요가 없습니다 .
--exclude-from=.gitignore
더 이상 사용할 수 없습니다 : /-업데이트 된 방법은 다음과 같습니다.일반적인 조언 : 깨끗한 리포지토리로 시작하십시오 – 커밋 된 모든 것, 작업중인 디렉토리 나 인덱스에 보류중인 것이 없으며 백업을 만드십시오 !
#commit up-to-date .gitignore (if not already existing)
#this command must be run on each branch
git add .gitignore
git commit -m "Create .gitignore"
#apply standard git ignore behavior only to current index, not working directory (--cached)
#if this command returns nothing, ensure /.git/info/exclude AND/OR .gitignore exist
#this command must be run on each branch
git ls-files -z --ignored --exclude-standard | xargs -0 git rm --cached
#optionally add anything to the index that was previously ignored but now shouldn't be:
git add *
#commit again
#optionally use the --amend flag to merge this commit with the previous one instead of creating 2 commits.
git commit -m "re-applied modified .gitignore"
#other devs who pull after this commit is pushed will see the newly-.gitignored files DELETED
브랜치의 커밋 히스토리에서 새로 무시 된 파일을 제거해야 하거나 새로 무시한 파일을 향후 풀에서 삭제하지 않으려면 이 대답을 참조하십시오 .
PowerShell에서 작업하는 경우 단일 명령으로 다음을 시도하십시오.
PS MyRepo> git filter-branch --force --index-filter
>> "git rm --cached --ignore-unmatch -r .\\\path\\\to\\\directory"
>> --prune-empty --tag-name-filter cat -- --all
그런 다음, git push --force --all
.
git filter-branch
과 다른 점은 git rm
무엇입니까? 나는 원래 버전을 사용해야한다고 생각 git filter-branch
했지만 대부분의 의견 은을 사용하는 것이 좋습니다 git rm
. 내가 이해 git rm
하는 것에서 현재 작업 디렉토리와 색인에서만 제거합니다. 그러나 이전에 여러 커밋을 추가 한 경우에도 여전히 저장소에 있습니다.
git rm
최신 커밋에서 미래에 파일을 제거합니다. git filter-branch
전체 기록에서 삭제하겠습니다. 참조 : help.github.com/articles/...를