2013-08-21 3 views
0

cvs/bugzilla에서 git/Stash/Jira로 변환하고 있습니다. 나는 git filter-branch을 사용하여 jira 이슈 ID가있는 커밋 메시지의 bugzilla 버그 #를 다시 쓰고 테스트 중입니다. 이 기능은 마스터에만 영향을 미치고 분기에는 영향을 미치지 않습니다. -- --all을 사용했지만 체크 아웃 된 분기가 없었습니다. 그게 필요한가요? 정확한 명령은 다음과 같습니다모든 브랜치에서 git-filter-branch 만들기

git filter-branch -f --msg-filter 'ruby -S gitBugzillaToJira.sh' --tag-name-filter cat -- --all 

주 - gitBugzillatoJira.sh 루비 스크립트는 락스 문제 ID로 버그질라 번호를 교환하는 작업을 수행합니다.

아이디어가 있으십니까?

+0

나는 그것의 다음 버전에서 다시 작성 커밋 메시지를 제공 할 것입니다 BFG의 저자을 해요 : 나는 내 다른 지점과 함께 마스터 3 참조를 얻고있다 왜 지금, 나는 알아낼 필요가있다. 관심 분야에서 얼마나 많은 개별 이슈 ID를 다시 작성해야합니까? –

+0

~ 10k 문제. 나는 BFG에 대해 읽었습니다! BFG (Pi에서)와 필터 - 브랜치를 비교하는 비디오를 보았습니다. :-) 필자가 필터 브랜치를 작동했기 때문에 (또는 그렇게 생각 했었는데) 이제는이 문제를 깨달았 기 때문에 더 많이 보지 못했습니다 ... – Scott

+0

@RobertoTyley이 기능은 BFG 레포 클리너에 포함 되었습니까? 방금 버전 1.12.16을 사용했고 커밋 메시지를 변경할 수있는 옵션을 발견하지 못했습니다. – lenz

답변

1

귀하의 git-filter-branch 주문이 정확한 것처럼 보입니다. 귀하의 Repo의 로컬 사본에있는 모든 참조를 업데이트해야합니다.

여기 보여주는 매우 유사 데모입니다이 예상대로 올바르게 작동 :

$ git clone https://github.com/defunkt/github-gem.git 
$ cd github-gem/ 
$ git filter-branch -f --msg-filter 'sed "s/e/E/g"' --tag-name-filter cat -- --all 

이 ... 당신이 git-filter-branch에서 돌아 오는 같은 출력을 볼 수가 모든 브랜치와 태그를 업데이트되고 있음을 나타냅니다 (당신은 그들에 git checkout을 할 필요없이) :

당신이 당신의 git filter-branch 실행의이 부분에서 얻을 무엇을 출력
Rewrite 8ef0c3087d2e5d1f6fe328c06974d787b47df423 (436/436) 
Ref 'refs/heads/master' was rewritten 
Ref 'refs/remotes/origin/master' was rewritten 
Ref 'refs/remotes/origin/fallthrough' was rewritten 
Ref 'refs/remotes/origin/gist' was rewritten 
Ref 'refs/remotes/origin/keithpitt-ruby-1.9-update' was rewritten 
WARNING: Ref 'refs/remotes/origin/master' is unchanged 
Ref 'refs/remotes/origin/organizations' was rewritten 
Ref 'refs/remotes/origin/upload' was rewritten 
Ref 'refs/tags/REL-0.4.2' was rewritten 

? 이미지처럼

+0

의견을 보내 주셔서 감사합니다. 나는 당신의 답변을 도움이되는 것으로 뽑았습니다. 아래에서 알 수 있듯이 이제는 문제가되는 필터 블록이 아니라는 것을 깨달았습니다. 그것은 나의 자식 - 밀어 넣기 주문이었다! – Scott

0

User Error!

는 사용자 오류의 사건이었다 말한다! 제 3 자 확인을 얻은 후에는 git-filter-branch가 작동해야만 git push 만 수행 했으므로 로컬로 체크 아웃 된 분기 만 푸시되었습니다. 모든 심판을 업데이트하려면 git push --all해야합니다.

* [new branch]  refs/original/refs/heads/master -> refs/original/refs/heads/master 
* [new branch]  refs/original/refs/remotes/origin/master -> refs/original/refs/remotes/origin/master 
* [new branch]  origin/master -> origin/master 
+0

먼저, SO를 먼저 검색해야했습니다. http://stackoverflow.com/questions/7654822/remove-refs-original-heads-master-from-git-repo-after-filter-branch-tree-filte refs/original/*는 제가 백업 한 사본입니다. refs/heads/master가 내 로컬 마스터 및 참조/원격/원점/마스터가 마스터 브랜치 인 헤드 포인터가됩니다. – Scott