2010-06-11 2 views
2

우리 회사는 CVS에서 git로 변환 중입니다. 우리는 오랫동안 CVS를 사용 해왔고, 거대한 역사가 있습니다. 손으로 할 일이 너무 많습니다.대규모 git commit quake

로그를 살펴보면 할 수있는 스쿼시가 많이 있습니다. 아주 많이. 내가하고 싶은 것은 두 개의 인접한 커밋을 비교하는 스크립트에 연결하는 것이다. true를 반환하면 커밋 메시지를 연결하고 커밋을 스쿼시합니다. 나는 또한 두 커밋과 커밋 메시지를 받아들이고 명령을 함께 스쿼시하는 명령에 만족할 것이다.

git rebase --interactive는 필자가 필요로하는 것에 가깝지만 "스쿼시"는 너무 많은 수동 개입이 필요합니다. 스쿼시 대신 "픽스 업"을 사용하는 방법을 살펴 보았지만 커밋 메시지를 잃고 싶지는 않습니다.

아이디어가 있으십니까?

답변

2

--autosquash는 어떻습니까?

git filter-branch와 결합하여 커밋의 이름을 바꾸는 스크립트를 만들 수 있습니다. (비록 경고의 한 단어지만 필터 브랜치에주의를 기울이고 매뉴얼 페이지의 경고를 읽으십시오.) 희미한 마음 일 수는 없습니다.

+0

나는 잘못 일 수는 있지만 여전히 해결되지는 않을 것입니다. "메시지 연결"문제. Autosquash는 스쿼시/픽스 업과 같지만 커밋 메시지를 기반으로합니다. – Nycto

+0

사실, 아마도 filter-branch를 사용하고, rebase -autosquash에 대해 완전히 잊어 버릴 수 있습니다. – dublev

+0

filter-branch에 대한 제안이 올바른 것으로 나타났습니다. "commit-filter"플래그를 사용하면 전체 repo에서 각 커밋을 처리 할 수 ​​있습니다. 전달한 콜백 스크립트에서 메시지를 commit-tree 명령으로 파이프하여 커밋 메시지를 변경할 수 있습니다. skip_commit을 호출하여 현재 커밋을 다음 커밋으로 병합 할 수도 있습니다. – Nycto