2012-10-12 6 views
4

저는 중앙 svn 저장소에서 작동하기 위해 windows에서 msysgit 자식을 사용하고 있습니다. 나는 자식을 으로 사용하고있다. 나는 모든 것을위한 훌륭한 로컬 브랜치를 갖고 싶고, 서로 리베이스한다.msysgit git-am은 자체의 git 형식 - 패치 시퀀스를 적용 할 수 없습니다.

중앙 저장소에서 자주 업데이트해야하므로 별도의 svn/git을 사용하는 것은 옵션이 아닙니다.

문제입니다 - git svn --help (남성 페이지)가 지역 지점에서 (SVN의 트렁크에서 추적 설정) 마스터 지점에 git merge를 사용하는 것은 좋지 않습니다 말한다,이 파티를 망칠 것 같은 git svn dcommit은 더 이상 작동하지 않습니다.

나는 정확히 사실이 아니다 것을 알고 제대로 마스터 이전에 병합에으로 업데이트 된 지점에서 병합하는 경우 당신은 git merge을 사용할 수 있습니다,하지만 난 그게 더 안전하고 실제로 git format-patchgit am를 사용하는 것을 시도하고있다. 우리는 코드 리뷰를 사용하고 있으므로 어쨌든 패치를 만들고 있습니다. 나는 또한 git cherry-pick에 대해 알고 있었지만 실제로는 패치를 읽지 않고이 패치에 해당하는 커밋을 실제로 리콜하지 않고 단지 git am /reviewed/patches/dir/* 만 남기고 싶습니다.

그럼 git svngit am의 문제점은 무엇입니까? 그것은 간단합니다 - 약간의 어려운 점에 대한 git amCRLFLF 제공된 패치 (정확히 말하면 git-mailsplit이이를 수행하고 있습니다)에 대한 변환입니다. 리베이스가 아닌 경우. git format-patch도 적절한 (LF- 종료) 패치를 생성합니다.

내 repo는 대부분 이므로 CRLF (그대로 유지해야 함) 잘못된 EOL로 인해 패치가 제대로 작동하지 않습니다. diff를 CRLF으로 변환하고 어떻게 든 해킹을 방지하기 위해 git am을 해킹하는 것도 효과가 없습니다. 파일을 삭제하거나 삭제하면 오류가 발생합니다. - git apply은/dev/null에 대해 불만을 토로합니다 (그러나 그는 /dev/null^M을 얻었습니다).

git am --ignore-space-change --ignore-whitespace으로 적용하면 은 LF 엔딩을 곧바로 인덱스에 적용 할 수 있습니다. 또한 이상합니다. 나는 그것이 (S을 통해) svn에 커밋을 통해 보존하고 그것을 체크 아웃하고 나는 밖으로 시도하고 싶지 않다면 모르겠다.

물론 실제 diff를 변환하기 위해 패치를 해킹하는 것은 여전히 ​​가능하지만 간단한 작업에는 너무 많은 해킹이 필요합니다.

따라서 패치를 만들고 동일한 시스템의 동일한 저장소에 적용 할 수있는 확실한 방법이 있습니까? 이상하게 느껴진다. msysgit은 자신의 패치를 적용 할 수 없다.

--keep-CR --ignore 공백

+0

이전에 비슷한 문제가 있었고'git am --keep-cr' IIRC를 사용하여 해결했습니다 ... – eckes

답변

3

자식 형식 - 패치 --ignore-공간 변화 --ignore 공백

자식 오전이 나를 도왔다. 이 글을 읽으면 더 잘 이해할 수 있습니다.