영구적으로 강제 힘내 (역사 포함) 중요한 파일이나 폴더를 삭제하는 방법

때로는 실수로, (암호 등) 몇 가지 중요한 파일을 업로드하거나 파일을 업로드하지 않으 (시간 또는 레인 .gitignore 추가 깜빡)

그리고 파일을 업로드하는 것은,이 우편 번호를 복제하거나 패키지도 때 업데이트해야합니다 다운로드하거나이 쓸모없는 파일을 다운로드 다른 사람으로 이어질 것입니다, 특히 큰되었습니다

따라서, 우리는 영구적으로 (파일의 역사적 기록을 포함)이 파일을 삭제하는 방법이 필요합니다.

첫째, 당신은 github의의 도움말을 참조 할 수 있습니다 :

https://help.github.com/articles/remove-sensitive-data

한 단계 :  라이브러리에서 파일을 제거

예를 들어 다음과 같은 윈도우 (리눅스와 유사하다), 프로젝트의 망할 놈의 배쉬 열 명령을 사용합니다 : 

 
$ 자식 필터 지점 --force --index 필터 '자식 RM --cached --ignore-UNMATCH 경로에 - 네 - 파일 제거'--prune 비어 --tag 이름 필터 고양이 - - -모든

어떤 경로 - 투 - 네 - 파일 삭제합니다. 삭제하려는 파일을 교체 할 수 있습니다, 당신은 (디렉토리와 자식 저장소에 상대적으로) 파일에 대한 상대 경로를 삭제할 것을 염두에두고, 여기에 파일이나 폴더의 참고 당신은 시작할 수 없습니다 '/', 그렇지 않으면 파일 또는 폴더가 설치 디렉토리 자식의 처음부터 간주됩니다.

당신은 목표는 다음 파일하지만 폴더에서`자식 --cached '명령을 -r 명령은 나중에 추가 RM, 폴더의 재귀 (하위) 폴더와 파일을 나타냅니다 삭제, 유사 to`하지 삭제하려면 RM -rf` 명령.

당신이 많은 파일을 삭제하려면 파일이나 경로, 중국어가있는 경우 중국어는 MinGW 또는 Cygwin에서 경로 설정이 너무 많은 문제가, 당신은 예를 들어, 와일드 카드 별표 (*)를 사용할 수 있기 때문에 또한, 그것은, 배치 실행의 .sh 파일에 기록 될 수 있습니다 : 사운드 / 음악 _ *. MP3, 그래서 music_가 삭제 시작 디렉토리에 MP3 파일에 소리를 넣어.

예를 들어이 방법를 들어, bash는 스크립트 파일, del-music-mp3.sh을 만듭니다


$의   자식 필터 - 지점 --force --index 필터 '자식 RM --cached --ignore-UNMATCH 프로젝트 / Moon.mp3'--prune 비어 --tag 이름 필터 고양이 - --all 자식 필터 -branch --force --index 필터 '자식 RM --cached --ignore-UNMATCH 사운드 / 음악 _ * MP3.'--prune 비어 --tag 이름 필터 고양이 - --all

 

 이 같은 것을 볼 경우, 삭제의 성공을 보여줍니다
 
48dc599c80e20527ed902928085e7861e6b3cbe6이 (266분의 266) 다시 작성 
# 참조 '심판 / 헤드 / 마스터'를 다시 작성되었다

xxxxx는 변경되지 않은 경우, 지침의 repo이 파일을 찾을 경로와 파일 이름이 올바른지 확인이 있습니다.

당신은 그들이 파일 또는 폴더, 파일 또는 폴더를 다시 업로드되지 않습니다하려면 다음 파일을 .gitignore에 추가하여 REPO를 밀어 것을 추가합니다. 

두 번째 단계는 : 우리의 개정 REPO 밀어

다음과 같이 REPO 다루 밀어 강제, 명령은 다음과 같습니다

$ 자식 밀어 원산지 마스터 -f

 

이 과정은 실제로 다시 업로드되어 우리의 repo, 시간이 많이 걸리는 다소 유사한 REPO를 다시 삭제하지만, 장점은 원래의 업데이트 기록을 유지하기 위해, 그래서는 다소 다른과 불구하고. 당신이 정말로 이러한 업데이트 기록을 신경 쓰지 않는 경우 재건은 모두 너무 나쁘지 않다, 삭제, 그리고 아마도 몇 가지 후자보다 직관적 인의 할 수있다.

다음과 같은 결과 :

객체를 계산 : 4669을 수행. 
4 개 스레드까지 사용 델타 압축. 
객체를 압축 : 100 % (4,352분의 4,352)을 수행. 
쓰기 제품 : 100 % (4,666분의 4,666), 35.16 MiB 크기 | 51 킬로바이트 / s의는 다. 
총 4666 (델타 1361), 0 (델타 0) 재사용 
https://github.com/defunkt/github-gem.git에 
 + beb839d ... 81f21f3 마스터 -> 마스터 (강제 갱신)

 

당신은 또한 지정된 파일이나 폴더를 삭제 버전에서 태그 싸움을하기 위해, 당신은 당신의 망할 놈의 태그를 밀어 강제로이 명령을 사용할 수 있습니다 :
 
$의 자식 밀어 원산지 마스터 --force --tags

 

세 단계 :  정리하고 공간을 확보

위 있지만 우리는 파일을 삭제했지만, 우리는 여전히 가비지 컬렉션 (GC)을 기다리고, 이러한 개체 내부의 repo를 유지, 그래서 우리는 완전히 제거하고 공간을 확보에 명령을 사용합니다.

다음과 같이 명령은 다음과 같습니다

$ RF RM은 .git / 심판 / 원 /
 
$의 자식 reflog 만료 --expire = 지금 --all
 
$의 자식 GC --prune = 지금

객체를 계산 : 2437, 다.
4 개 스레드까지 사용 # 델타 압축.
# 객체를 압축 : 100 % (1,378분의 1,378)을 수행.
# 쓰기 제품 : 100 % (2,437분의 2,437)가, 다. # 총 2437 (델타 1461), 1802 (1048 델타)를 재사용

$의 자식 GC --aggressive --prune = 지금

객체를 계산 : 2437, 다.
4 개 스레드까지 사용 # 델타 압축.
# 객체를 압축 : 100 % (2,426분의 2,426)을 수행.
# 쓰기 제품 : 100 % (2,437분의 2,437)가, 다. # 총 2437 (델타 1483), 0 재사용 (델타 0)

지금 당신은 당신의 .git 디렉토리를 보면 파일 크기가 작지.

추천

출처www.cnblogs.com/mafeng/p/10959874.html