IT

Git 저장소에서 모든 태그 삭제

itgroup 2023. 5. 23. 21:46
반응형

Git 저장소에서 모든 태그 삭제

Git 저장소에서 모든 태그를 삭제하고 싶습니다.내가 어떻게 그럴 수 있을까?

용사를 합니다.git tag -d tagname를 합니다.tagname 그리고 및용사로git push --tags나는 git 공급자의 태그를 업데이트합니다.

노력했습니다.

git tag -d *

하지만 나는 그것을 봅니다.*현재 디렉터리의 파일을 의미합니다.

$ git tag -d *
error: tag 'file1' not found.
error: tag 'file2' not found.
...

태그가 많다고 생각하고 모두 삭제하고 싶습니다.

git tag | xargs git tag -d

모든 것을 파이프로 연결하는 유닉스 철학을 따르기만 하면 됩니다.

윈도우즈에서는 gitbash를 동일한 명령과 함께 사용합니다.

원격 태그를 삭제하려면(로컬 태그를 삭제하기 전에) 다음을 수행합니다.

git tag -l | xargs -n 1 git push --delete origin

로컬 복사본을 삭제합니다.

git tag | xargs git tag -d

하나의 명령에서 모든 태그를 강제로 삭제하는 것이 더 효율적일 수 있습니다.특히 수백 개를 가지고 있다면 더욱 그렇습니다.

윈도우즈가 아닌 적절한 셸에서 모든 원격 태그를 삭제합니다.

git tag | xargs -L 1 | xargs git push origin --delete

그런 다음 모든 로컬 태그를 삭제합니다.

git tag | xargs -L 1 | xargs git tag --delete

당신이 없는 한 이것은 괜찮을 것입니다.'당신의 태그 이름으로.이를 위해 다음 명령을 사용하면 됩니다.

git tag | xargs -I{} echo '"{}"' | tr \\n \\0 | xargs --null git push origin --delete
git tag | xargs -I{} echo '"{}"' | tr \\n \\0 | xargs --null git tag --delete

줄 목록을 가져와서 따옴표로 묶고 단일 줄로 만든 다음 해당 줄을 명령으로 전달하는 다른 방법이 있을 수 있습니다.이것이 궁극적인 고양이 가죽 환경이라는 것을 고려하면 무엇보다도 그렇습니다.

PowerShell을 사용하는 Windows 사용자의 경우:

git tag | foreach-object -process { git tag -d $_ }

반된모든삭제에서 한 모든 됩니다.git tag를 으로써.git tag -d반환되는 각 행에 대해

로컬 저장소에 태그가 없는 경우 로컬 저장소로 가져가지 않고도 원격 태그를 삭제할 수 있습니다.

git ls-remote --tags --refs origin | cut -f2 | xargs git push origin --delete

오리진을 원격 처리기 이름으로 바꾸는 것을 잊지 마십시오.

원격에서 태그를 삭제하는 방법이 누락된 Stefan의 답변에 추가.윈도우즈 powershell의 경우 이를 실행하여 원격 태그와 로컬 태그를 먼저 삭제할 수 있습니다.

git tag | foreach-object -process { git push origin --delete $_ }
git tag | foreach-object -process { git tag -d $_ }  

Windows 사용자의 경우:

git 태그를 실행하고 git 태그 -d에 해당 목록을 공급하여 모든 로컬 태그를 삭제합니다.

FOR /f "tokens=*" %a in ('git tag') DO git tag -d %a

(https://gist.github.com/RandomArray/fdaa427878952d9768b0) 에서 찾을 수 있습니다.

다음을 사용할 수도 있습니다.

git tag -d $(git tag)

모든 로컬 태그를 삭제하려면 다음 명령을 실행합니다.

git tag | xargs git tag -d

위 명령을 실행하여 로컬 태그를 삭제한 후 원격 태그를 삭제하려면 아래 명령을 실행합니다.

git ls-remote --tags --refs origin | cut -f2 | xargs git push origin --delete

참고: 오리진을 원격 처리기로 바꿉니다.

접두사가 있는 태그를 삭제해야 합니다.

예를 들어 v0.0.1, v0.0.2, v0.0.3, v0.0.4, v0.0.5 태그를 삭제해야 합니다.

git tag -d $(git tag -l "v0.0.*")

위의 문장을 분해하고 설명합니다.

  1. 접두사가 있는 모든 태그를 나열하는 방법

    git tag -l "v0.0.*"

  2. 태그를 삭제하려면

    git tag -d $tag_names

그게 그 진술이 작동하는 방식입니다.

이 모든 옵션은 Linux에서만 작동하므로 다음과 같은 Windows를 사용해야 합니다.

FOR /F usebackq %t IN (`git tag`) DO @git tag --delete %t

Powershell v7은 삭제해야 하는 업스트림(오리진) 태그가 많은 경우 각 태그에 대해 병렬을 지원합니다.

git tag | foreach-object -Parallel { 
git push origin --delete $_ 
git tag -d $_ 
}

최근 버전이 병렬화 및 필터링됨

git tag -l "v1.0.*" | xargs -L 1 | xargs git push origin --delete
git fetch origin --prune --prune-tags

첫 번째 줄, 원격에서 일치하는 모든 태그를 병렬로 제거합니다.
두 번째 줄에서는 git 버전 v2.26.2에서 삭제된 모든 태그를 제거하여 현재 보고서를 업데이트합니다.

추가할 수 있는 첫 번째 줄을 테스트하는 방법--dry-run또한 tag list 명령어를 살펴보시기 바랍니다. 멋진 와일드카드와 제외/포함 기능이 있습니다.

"v"가 포함된 모든 태그 표시

git tag -l | grep v | xargs -n 1 sh -c 'echo "Processing tag $0\n" && git show -s $0'

와일드카드 패턴이 있는 로컬 태그와 원격 태그를 모두 삭제하는 하나의 라이너입니다.

TAGPATTERN="0.1.*" ; git push origin --delete $(git tag -l $TAGPATTERN) ; git tag -d $(git tag -l $TAGPATTERN)

원격 태그는 목록이 로컬에서 생성될 때 먼저 삭제됩니다.

필요 없는 솔루션을 찾을 수 없었습니다.git push태그당 호출을 수행하기 위해 이 변형을 고안했습니다. 이 변형은 - 제 경우 - 런타임을 몇 시간에서 몇 초로 단축했습니다.

git push --delete origin $( git ls-remote --tags origin | awk '{print $2}' | grep -Ev "\^" | tr '\n' ' ')

설명.

  • git push --delete origin $(...)오리진 시 태그(또는 여러 개)를 삭제합니다.
  • $( git ls-remote --tags origin | awk '{print $2}' | grep -Ev "\^" | tr '\n' ' ')모든 태그의 공백으로 구분된 문자열을 만듭니다.
    • git ls-remote --tags origin원격 오리진의 모든 태그를 인쇄합니다.
    • ... | awk '{print $2}' | ...이전 명령 출력의 두 번째 열만 인쇄합니다.
    • ... | grep -Ev "\^" | ...원하지 않는 항목 필터링refs/tags/mytag^{}변형(어디서 왔는지 확실하지 않음)
    • ... | tr '\n' ' '목록을 공백으로 구분된 문자열로 변환합니다.

공백으로 구분된 문자열에 여러 개의 태그 이름을 제공할 수 있다는 점을 활용하여 다음 항목만 호출합니다.git delete한번만.

Windows의 경우 원격 태그 제거를 위해 다음 작업을 수행합니다.

git fetch --tags
git push origin --delete $(git tag -l)

로컬에서 Git 태그는 디스크에 저장된 파일일 뿐입니다..git/refs/tags하위 폴더.

그냥.cd .git/refs/tags저장된 모든 파일을 제거하고 파일을 삭제하는 방법을 사용합니다.rm *파일에서 삭제 탐색기 UI 등)

언급URL : https://stackoverflow.com/questions/19542301/delete-all-tags-from-a-git-repository

반응형