2014-04-08 4 views
1

SVN을 통해 현재 관리되고있는 프로젝트를 Git으로 포크하고 싶습니다. SVN repo는 svn.openvpms.org/openvpms입니다. 아래에는 약 8 개의 하위 프로젝트가 있으며 각 프로젝트에는 트렁크/분기/태그 디렉토리가 있습니다. 내 IDE에서 작업 할 때이 경우 SVN이 프로젝트 Openvpms프로젝트 관리 - 필요에 따라 svn을 리베이스 할 수있는 포크로 SVN main에서 Git을 포기하십시오.

  • svn.openvpms.org
    • openvpms을하는 방법을 보여줍니다 는 사실 별도 SVN을 통해 밖으로하지만 특정 디렉토리 구조 예를 들어 에서 각각 확인
      • 프로젝트 1 (예를 들어 openvpms) (이 될 것 부모 프로젝트)
        • 지점
        • 트렁크
        • 태그
      • 프로젝트 2 (예를 들어 openvpms-원형) (부모가이에 따라 달라집니다)
        • 지점
        • 트렁크
        • 태그
내가 로컬 그들을 체크 아웃시

나는 MAINDIR

  • 프로젝트 1 (프로젝트 1 개 트렁크)
    • SRC
  • 프로젝트 2 (프로젝트

    • 에 트렁크를 확인합니다 2 트렁크)
      • src
      • 자식-SVN을 사용하여, 이눔 있지만, 각 프로젝트에 대한 SVN에서 branchs 및 태그를 유지하기 위해 전체 설치가 포크입니다 내가 뭘하고 싶은

16,.

각 프로젝트에 대한 Git repo를 만들 수 있으며 각각 유일한 옵션 일 수 있습니다. 여기있는 약간의 우려는 svn repo에있는 확실한 디렉토리 구조를 잃어버린다는 것입니다.

전체 svn repo를 단일 자식 repo에 복제하고 각 하위 프로젝트의 트렁크/지점/태그를 유지 관리하는 다른 방법이 있습니까?

나는 지금 프로젝트 관리 SE 사이트가 있다는 사실을 알고 있지만 실제로이 질문은 태그/분기/트렁크 구조로 각각 여러 프로젝트를 복제하는 git-svn 사용법에 관한 내용입니다.

나는 acctually 바로 무슨 일

git svn clone "svn://svn.openvpms.org/openvpms/openvpms" \ 
"C:\Users\mydirectory\OPENVPMS-Git LOCAL REPO\openvpms" \ 
-T trunk -b branches -t tags 

URL의 높은 수준의 사용 c:/Users/mydirectory/GIT_LOCAL_REPO/openvpms/.git/
에서 초기화 빈 Git 저장소 실행할 때 : svn://svn.openvpms.org/openvpms/openvpms => svn://svn.openvpms.org/openvpms

그래서 보인다 자식 - svn 어쨌든 부모에게 곧장 백업 ... 나는 모든 브랜치와 태그를 어떻게 찾을 지 확신하지 못합니다.

저는 현재베이스 URL에서 전체 Repo를 복제하기 위해 SmartGit의 인터페이스를 사용하려고합니다 ... svn://svn.openvpms.org/openvpms ... 며칠이 걸릴 것으로 보이고 재시작이 필요하므로 두 번 잠갔습니다.

+0

그래, 각 svn 프로젝트에서 git-svn을 사용하면 8 대 정도의 git repos가 생성됩니다. – Narrim

답변

0

OK 글쎄 마지막으로 git svn을 사용하여 결국이 하나를 정렬했다고 생각합니다. 먼저 git/config 파일을 편집하여 원격으로 각 svn 프로젝트를 추가했습니다. 나는 그들에게 각각 다른 원격 이름과 별칭을 주었다.등

/... 
[svn-remote "parent"] 
    url = svn://example.com/rootproject 
    fetch = rootproject/trunk:refs/remotes/origin/trunk 
    branches = rootproject/branches/*:refs/remotes/origin/* 
    tags = rootproject/tags/*:refs/remotes/origin/tags/* 
[svn-remote "subproject1"] 
    url = svn://localhost/rootproject 
    fetch = subproject1/trunk:refs/remotes/subproject1/trunk 
    branches = subproject1/branches/*:refs/remotes/subproject1/* 
    tags = subproject1/tags/*:refs/remotes/subproject1/tags/* 
[svn-remote "subproject2"] 
    url = svn://localhost/rootproject 
    fetch = subproject2/trunk:refs/remotes/subproject2/trunk 
    branches = subproject2/branches/*:refs/remotes/subproject2/* 
    tags = subproject2/tags/*:refs/remotes/subproject2/tags/* 
[svn-remote "subproject3"] 
    url = svn://localhost/openvpms 
    fetch = subproject3/trunk:refs/remotes/subproject3/trunk 
    branches = subproject3/branches/*:refs/remotes/subproject3/* 
    tags = subproject3/tags/*:refs/remotes/subproject3/tags/* 
    ..../ 

는 내가이 지금 그때

git checkout origin/trunk 

을 체크 아웃 을 구조 조정하기 위해 자식의 repo 의 루트로 각 프로젝트를 체크 아웃

git svn fetch --all 

실행 각 하위 프로젝트에 대해 실행했습니다.

git merge -s ours --no-commit subproject1/master <2> 
git read-tree --prefix=subproject1/ -u subproject1/master <3> 
git commit -m "Merge subproject1 as our subdirectory" <4> 

는 지금

처럼 보였다 프로젝트를했다
ParentProject 
|-src 
|-parentpom.xml 
|-subproject1 
| |-src 
| |-pom.xml 
|-subproject2 
| |-src 
| |-pom.xml 
|-subproject3 
| |-src 
| |-pom.xml 

나는 여전히

git fetch --all 

을 실행할 수 있다고 생각 지금

다음 실행

git pull -s subtree subproject1 trunk 
,

을 업데이트하여 기본 svn repos ..에서 변경 사항을 가져옵니다. 그러나 이것은 주어진 svn 히스토리를 유지하면서 git에 머물러있는 것을 의미합니다.

2

당신 해야 완전히 git-svn Man Page을 읽어 조심스럽게

그것은-SVN 힘내 어쨌든 부모에 백업을 똑바로

가는 것 같다 그냥 발견하고 git init

에 대한 --no-minimize-url 옵션을 시도

나는 각 프로젝트에 대해 힘내 저장소를 만들고 각각을 복제 할 수있다. 내 유일한 옵션이 될 수

그것은 망할 놈의 하나의 Git 저장소에있는 많은 SVN - 저장소를 추적 할 수있는 것 (I 경험 않을거야 힘내 - 소년, 단지 약간 깊게 RTFM을 시도)하지만, 수작업이 필요합니다 (그리고 , 깜짝, 순수한 CLI). git-svn man page의 "구성"섹션에서

  • 내가있는 글로브 패턴 [svn-remote "project-a"] 샘플을 보았다 지점 | 태그 정의

  • (? 당신이() 나머지를 추가 할 수 있습니다 첫 번째 SVN - 원격의 복제 후 내 손을 리모컨)

    "Practical tips for using Git with large Subversion repositories"의 "다른 Subversion 브랜치 얻기"에서 다른 RELPATH을 가진 하나의 svn-remote 내부에 하나 이상의 페치 정의를 사용하는 것이 좋습니다. 따라서 실제 SVN-1의 트렁크/브랜치/태그에 많은 fetch이 들어있는 1 개의 svn- SVN-repo 내부 프로젝트)