2014-11-26 4 views
2

더 이상 중요하지 않은 git 저장소에 오래된 태그가 있습니다. git 태그를 실행할 때 태그가 기본적으로 표시되지 않도록 태그를 아카이브하고 싶습니다. 역사를 지키고 싶기 때문에 나는 그들을 삭제하고 싶지 않습니다. 어떻게해야합니까?어떻게 이전 git 태그를 보관할 수 있습니까?

+0

이 질문은 HTTP 유사합니다

git fetch origin +refs/archive/*:refs/archive/* 

이제 사용하여 나열 할 수 있습니다 : //stackoverflow.com/questions/1307114/how-can-i-archive-git-branches하지만 내 질문은 지점 대신 태그에 관한 것입니다. (태그를 태그로 변환하여 보관합니다.하지만 태그를 보관하는 방법은 무엇입니까?) –

+3

repo를 복제하고 백업에 태그를 남긴 다음 작업중인 태그에서 태그를 삭제하십시오. –

답변

1

복제에게 REPO를 복원 할 수 있습니다.

(@AndrewC는 질문에 대한 답변에이 답변을 적었지만 질문에 대한 대답으로 간주됩니다.)

0

태그를 삭제할 때주의해야합니다. 어쩌면 태그가 일부 sommit에 대한 유일한 참조 일 수도 있습니다.

     branch 
         | 
         V 
o---o---o----o---o---o 
    \ 
     o---o---o---o 
       ^
        | 
        someTag 

커밋에 대한 마지막 참조를 제거하면 언젠가는 커밋을 잃게됩니다. 언젠가는 git gc이 그들을 수집하자마자 의미합니다. 이 문제가 발생하지 않는 경우

당신은 당신의 태그를 덤프

$ git show-ref --tags > tag_refs-20141126.txt 

를 사용할 수 있으며,이 파일에에 ID를 커밋합니다. 그런 다음이 파일을 저장소로 커밋하거나 다른 위치에 보관하십시오. 이 후에는, 백업에 태그를두고 작업하고있는 한에서 삭제, 태그를

$ git for-each-ref --format="%(refname)" refs/tags | cut -c11- | \ 
    while read tag; do git tag -d $tag; done 

을 삭제하고 나중에

$ cat tag_refs-20141126.txt | while read commitid tagref; do echo $tagref $commitid; done \ 
    | cut -c11- | while read tagname commitid; do git tag $tagname $commitid; done 
1

태그를 보관 해 두었다가 s 태그. 또한 기본 클론이 페치를 수행하는 것을 방지합니다. 당신이 'HIDE'로 시작하는 모든 태그를 보관할 가정의 기원에

(베어의 repo) :

mkdir refs/archive 
mv refs/tags/HIDE* refs/archive/ 

지금 git tag가 더 이상이 심판을 표시하지 않습니다, 그러나 그들은 여전히 ​​저장소에 존재합니다.

나중에 해당 지역의 복제에 보관 된 태그를 풀다운하려면 실행할 수있는 다음

git for-each-ref refs/archive 
+0

이름에는 특별한 것이 없습니다. 'archive'는 원하는 경우 다른 이름으로 지정할 수 있습니다. – Zitrax

+0

그들의 커밋이 가비지 수집되지 않을까요? –

+0

@DanFabulich 아니요, 커밋은 태그로 참조되지 않고 계속 참조됩니다. 베어 리의 저장소에서'git show-ref'를 실행하면 아카이브 레퍼런스 (또는 내가 답변에서 언급 한 각각의 버전)를 볼 수 있습니다. 모든 것을 강제로 확인하여 확인할 수 있습니다. 자세한 내용은 [이 답변] (http://stackoverflow.com/a/14729486/11722)을 참조하십시오. 단, 해당 cmd를 실행하기 전에 경고를 읽으십시오. – Zitrax

관련 문제