TL; DR :
git svn
이 "@"를 생성 - 지점 (또는 태그가) 하위 디렉토리 생성 된 경우 지점 (또는 자식-SVN에 의해 추적되지 않은 다른 디렉토리). 같은 이름을 가진 "일반"브랜치가 있지만 "@"접미사는 없습니다. "@"- 브랜치는 일반 브랜치의 분기점으로 만 존재합니다.
참고 : 이에 대한 패치를 제출했습니다. 이 설명의 편집 된 버전은 이제 새로운 섹션 "SVN 브랜치 처리"(Git 1.8.1 이후)의 공식 git svn
맨 페이지의 일부입니다.
서브 버전에서 브랜치와 태그는 디렉토리 트리의 단지 복사본입니다, 그래서 그것은 그 자체 지점 (또는 트렁크)있는 디렉토리에서 분기를 만들 수 (보통 낙담하지만) 가능합니다. 예를 들어,/trunk/foo를/branches/bar에 복사하는 대신/trunk ("하위 디렉토리 브랜치", 말하자면)를 복사하거나 트렁크/태그/브랜치 구조 외부에있는 디렉토리를 복사합니다 SVN에서 가능).
그러나 git에서는 분기가 항상 전체 Repo에 사용되고 하위 디렉토리는 존재하지 않습니다. 따라서 git svn
은 해결 방법을 사용합니다. git-svn에 의해 브랜치로 추적되지 않는 디렉토리에서 복사 된 브랜치를 발견하면 새로운 히스토리가 작성됩니다. 예를 들어,/트렁크/foo는이 r1234에서/분기/줄에 복사 하위 디렉토리 지점의 경우, 생성됩니다
- 새로운 자식이 번호가 있습니다주의 (뒤쪽에 r1233에서 각 SVN 개정 커밋 지점이 만들어지기 전의 마지막 개정). 이 커밋의 트리에는 분기 된 서브 디렉토리 만 포함됩니다. 따라서 r1233의 각 개정판에 대해 일반적으로 두 개의 git 커밋이 있습니다. 하나는 전체 트리 (git-svn이
trunk
의 기록을 처리 할 때 생성됨)이고 다른 하나는 새로운 것입니다.
- 위의 r1233에서 작성한 커밋을 poinst하는 "bar @ 1233"(분기 이름 @ 개정)이라는 더미 분기입니다.
- 분기를 작성한 커밋 인 r1234에서 커밋. 이 커밋은 상위 (유일한) 조상으로 위의 분기를 갖습니다.
- 두 번째 커밋을 가리키는 "bar"라는 분기.
그런 식으로
이 하위 디렉토리 지점 표시 줄, 당신이 얻을 자식 두 가지
- 줄 분기는
- 줄에서 생성 된 저장소의 상태를 나타냅니다 1233, @, 어떤 지점을 나타냅니다
나는 왜이 더미 분기가 만들어 지는지 잘 모르겠습니다. 지점이 분기 된 개정판에 대한 정보를 나타내고 지점에 대한 완전한 기록을 보유한 것으로 생각됩니다. 이기구 전체 플래그 --no-follow-parent
를 이용하여 스위치 오프 될 수 있음은
참고. 이 경우, 각 SVN 브랜치는 SVN 브랜치 디렉토리의 커밋과 함께 git 브랜치가된다. 각 브랜치는 나머지 히스토리와 연결되지 않을 것이며, 브랜치의 첫 번째 커밋에 해당하는 자체 루트 커밋을 갖게됩니다.
나는이 이름이 어디에서 왔는지 발견하는데 어려움을 겪고있다.하지만 원래 만든 svn 브랜치 (또는 태그)에 의해 더 이상 참조되지 않는 SVN 커밋에서이 브랜치들이 생성 된 것처럼 보인다. Git에서 unreferenced 커밋과 비슷하지만 커밋의 분기 이름을 복구 할 수 있다는 점을 제외하고는. – fork0
@ fork0 : 답장을 보내 주셔서 감사합니다. 하지만 난 분명히 unreferenced 커밋 svn에 존재할 수있는 방법에 관해서는 이해가 안 돼. 참조가 어떻게 손실 될 수 있습니까? 이것에 대한 생각을 나눌 수 있습니까? – crankparty
잘 모르겠습니다. 어쩌면 SVN 저장소의 관리자가 결코 그들을 정리하지 않았을 것입니다 (또는 SVN은 전혀 능력이 없습니다). 나는 참조가 손실되었다고 말하는 것이 아니라 오히려 누군가가 역사의 이전 시점에서 커밋을 시작했다는 것을 의미하지 않았다. – fork0