programing

filter-branch --tree-filter 후에 git repo에서 refs / original / heads / master를 제거 하시겠습니까?

new-time 2020. 6. 2. 22:37
반응형

filter-branch --tree-filter 후에 git repo에서 refs / original / heads / master를 제거 하시겠습니까?


여기에 질문 한 것과 같은 질문이 있습니다 :

루트 디렉토리의 새로운 자식 저장소는 하위 디렉토리에 존재하는 저장소를 가정합니다.

나는이 대답을 여기에 따랐다 :

루트 디렉토리의 새로운 자식 저장소는 하위 디렉토리에 존재하는 저장소를 가정합니다.

이제

gitk --all

두 개의 기록을 보여줍니다. 하나는 현재에서 끝나고

master

다른 하나는라는 이름

original/refs/heads/master

입니다.이 두 번째 역사가 무엇인지 또는 저장소에서 제거하는 방법을 모르겠습니다. 내 저장소에 두 개의 이력이 필요하지 않습니다.어떻게 제거합니까?자신을 재현하려면 :

mkdir -p project-root/path/to/module
cd project-root/path/to/module
mkdir dir1 dir2 dir3 
for dir in * ; do touch $dir/source-file-$dir.py ; done
git init
git add .
git commit -m 'Initial commit'

이제 원래 포스터의 문제가 있습니다. 위의 답변을 사용하여 git repo의 루트를 project-root로 이동합시다.

git filter-branch --tree-filter 'mkdir -p path/to/module ; git mv dir1 dir2 dir3 path/to/module' HEAD
rm -rf path
cd ../../../ # Now PWD is project-root
mv path/to/module/.git .
git reset --hard

이제 내 현재 문제를 참조하십시오.

gitk --all &
git show-ref

 

refs/original/heads/master

모든 관련 기록을 제거하려면 어떻게해야 합니까?


refs/original/*

필터 브랜치를 엉망으로 만들 경우를 대비하여 백업이 있습니까? 날 믿어,

정말

좋은 생각 이야 .결과를 검사하고 원하는 것을 확신하면 백업 된 참조를 제거 할 수 있습니다.

git update-ref -d refs/original/refs/heads/master

또는 여러 심판 에게이 작업을 수행하고 모두 지우려면 다음을 수행하십시오.

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

(필터 브랜치 맨 페이지에서 직접 가져 왔습니다.)이것은 당신에게 적용되지 않지만, 이것을 찾을 수있는 다른 사람들에게 : 디스크 공간을 많이 차지하는 컨텐츠

제거

하는 필터 브랜치를 수행하는 경우 , 참조 로그 를 실행

git reflog expire --expire=now --all

하고

git gc --prune=now

만료하고 현재 사용하지 않는 객체를 삭제할 수도 있습니다 . (경고 : 완전히 돌이킬 수 없음. 그렇게하기 전에 반드시 확인하십시오.)


Windows PowerShell을 사용하는 경우 :

git for-each-ref --format="%(refname)" refs/original/ | foreach-object -process { git update-ref -d $_ }

filter-branch

리포지토리가 참조 로그 및 가비지 수집을 정리해야하므로 백업을 유지합니다. 삭제하기 전에이 백업이 필요하지 않은지 확인하십시오.

rm -Rf .git/refs/original
git gc --aggressive --prune=now

참고 URL :

https://stackoverflow.com/questions/7654822/remove-refs-original-heads-master-from-git-repo-after-filter-branch-tree-filte

반응형