IT

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

itgroup 2023. 6. 22. 21:41
반응형

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

여기서 질문한 것과 같은 질문이 있었습니다.하위 디렉터리에 기존 리포지토리를 추가하기 위한 루트 디렉터리의 새 git 리포지토리

저는 여기서 다음과 같은 대답을 했습니다.하위 디렉터리에 기존 리포지토리를 추가하기 위한 루트 디렉터리의 새 git 리포지토리

지금이다,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'

이제 우리는 원래 포스터의 문제를 가지고 있습니다.위에 링크된 답변을 사용하여 gitrepo의 루트를 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=nowreflog를 만료하고 현재 사용되지 않는 개체를 삭제합니다. (경고: 완전히, 완전히 되돌릴 수 없습니다.)이 작업을 수행하기 전에 반드시 확인해야 합니다.)

Windows PowerShell을 사용하는 경우:

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

filter-branch저장소에서 reflog를 정리하고 가비지 수집을 수행할 수 있도록 백업을 보관합니다.삭제하기 전에 이 백업에 이 필요가 없는지 확인하십시오.

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

반응형