2012-03-04 4 views
4

저는 잠시 동안 git-svn을 사용하고 있습니다. 우리 팀의 다른 모든 사람들은 svn을 직접 사용하고 있습니다. 우리는 모두 git를 사용하기로 결정했습니다.git-svn에서 git으로 마이그레이션 한 후 가짜 원격 브랜치를 제거하려면 어떻게해야합니까?

$ git remote add origin [email protected]:mycompany/myproject.git 
$ git push -u origin master 

이 잘 갔지만, 프로세스가 완료되었을 때 그 자식이 모든 말도 안되는 지점을 유지했다 :이 작업을 수행하기 위해, 나는 내 "쪽"인 자식의 repo 사용하는 등 같은 자식을-svn을 -svn은 내가 그것을 처음 사용할 때 하나의 작은 꼬임으로 만들었습니다. git은 더 이상 그들이 지점이라고 인정하지 않습니다. 여기처럼 내 목록을보고 무엇 :이 성가신했다

$ git branch -r 
domain_integration 
dot-org 
[email protected] 
email-edit-page 
origin/account-integration 
origin/master 
origin/stable 
prototype_to_jquery-1.1.0 
[email protected] 
tags/development-1.1.0.0 
tags/pre-2011-02-08 
tags/production-1.0 
tags/stable-1.0.0 
tags/stable-1.0.1 
tags/stable-1.1.0 
tags/stable-1.1.0.1 
trunk-stash 

들이 (대부분) 어디에서 왔는지 내가 아는 불구하고,하지만 지금 난 삭제할 수는 없습니다.

$ git branch -d trunk-stash 
error: branch 'trunk-stash' not found. 

내가 그들을 .git/심판/리모트로 가서 바로 삭제하여이 중 일부를 해결할 수 있었다, 그러나 약간이 있었다 :이 문제가 발생합니다. 내가 찾을 수있는 유일한 곳은 .git/info/refs이다. 다음과 같이 보입니다 :

... 
7788d300f0d4370d65a3ccf3e47d90f7fb16b0b4  refs/remotes/tags/stable-1.0.0 
aace34d6745080ce2b6b29e927f5d1b050b99511  refs/remotes/tags/stable-1.0.1 
58bd2ac23d5979ff61bd6305df18f8a5da50f888  refs/remotes/tags/stable-1.1.0 
644fd55fcdf2569305cdbe0b6fefb9f247625658  refs/remotes/tags/stable-1.1.0.1 
bc8e9f9177c9612aceb55624adea1b02e9e8620f  refs/remotes/trunk 
69493e14345e6a7a4db324935bccd6393f201da4  refs/remotes/trunk-stash 
25b7024f6c1d38c10400b2c2e7b446aae1e84e06  refs/stash 
... 

이것은 단지 마지막 커밋과 관련이 있다고 가정합니다. "가짜"파일을 삭제하는 것이 합리적입니까? 이게 뭔가를 깨뜨릴 수 있습니까? (작동합니까?)

+0

해당 명령으로 원격 분기를 나열하고 있습니다. 'branch -d'를 사용하여 원격 브랜치를 삭제할 수 없습니다. 모든 역사적인 svn 분기를 삭제 하시겠습니까? (당신은'.git/packed-refs'에서 찾을 수 있습니다.) – knittl

+0

예, 원격 브랜치입니다. 나는 그것을 언급해야했고 조금 다른 방식으로 질문을해야했다. 자식은 더 이상 존재하지 않는다고 어떻게 말합니까? git/packed-refs에있는 것이 맞습니다. 아마도 그 파일을 삭제해야합니다. 아니면 데이터베이스가 압축 될 때 사라질 것입니까? (나는 처음부터 이것을하지 않았다. 특정 상황에서 당신이 이상한 곳으로 갔을 때 물건을 잃어 버릴 수 있다는 것을 알기 때문이다. 나는 몇 가지 일을 바로 잡을 때 더 확신한다.) – cesoid

+0

git gc를 실행하면 사라지지 않을 것입니다. @ MagnusSkog의 답은 맞아야합니다 : 리모컨에 존재하지 않으면 삭제됩니다. 정말로, _really_, ___really___은 더 이상 필요하지 않다는 것을 확신합니다. refs-packed 파일에서 직접 삭제할 수 있습니다. – knittl

답변

2

마스터 분기 만 원할 경우 언제든지 로컬 저장소를 삭제하고 다시 복제 할 수 있습니다. 마스터 브랜치 이외의 다른 것에 신경 쓰지 않는 것이 가장 쉽습니다. 시도해 볼 수 있습니다.

git remote prune origin 

더 이상 출처가 아니지만 로컬로 유지되는 원격 참조를 제거합니다.

+0

이것은 기이하게도 아무것도 수행하지 않습니다. 어쩌면 내가 .git/refs/remotes에서 삭제했을 때 이미 제거했던 것들을 제거했을 지 모르지만 이제는 아무 말도하지 않고 git branch -r의 결과를 변경하지 않을 것입니다. – cesoid

+0

그러면 원격 참조에 해당 참조가 있음을 의미합니다. 원격에서 완전히 삭제하려는 경우 삭제해야합니다 (예 : "git push origin : account-integration"원격 지사 계정 통합을 삭제하려면 콜론에 유의하십시오. – ralphtheninja

+0

죄송합니다. 원래/* 가지를 포함하여 혼란스럽게 만들었습니다. 그것들은 존재합니다 (즉, 나는 그것들을 github에서 볼 수 있습니다). github이 존재를 부인하는 것은 예를 들어 "domain_integration"입니다. 나는 그것이 "동성애자 푸시 : domain_integration"(나는 어쨌든 시도했다)이 될 것이라고 생각하지 않기 때문에 동등한 명령이 무엇인지 알지조차 모른다. domain_integration은 .git/config에 표시되지 않습니다. 체크 아웃하려고하면 머리가 분리 된 상태라는 것을 알 수 있습니다. (그러면 git 브랜치는 내가 "(no branch)"라고 알려줄 것이다.) – cesoid

관련 문제