programing

Submodule로 Subversion 저장소를 가질 수 있습니까?

javajsp 2023. 9. 11. 21:29

Submodule로 Subversion 저장소를 가질 수 있습니까?

내 Git 저장소에 Submodule로 Subversion 저장소를 추가할 수 있는 방법이 있습니까?

다음과 같은 경우:

git-svn submodule add https://svn.foo.com/svn/proj --stdlayout svn-project

https://svn.foo.com/svn/proj는 Subversion 저장소를 가리킵니다.

난 있는 걸 안다.git-svnSubversion 저장소와 상호 작용할 수 있습니다.그래서 생각중입니다. 혹시 Subversion 저장소를 확인할 수 있는 방법이 있을지도 모릅니다.git-svn서브모듈로 사용할 수 있습니다.

아니요. 전용 깃 저장소에 svn 저장소의 거울을 설치하는 것이 최선의 방법입니다.

git svn clone -s http://subversion.example.com/ mysvnclone
cd mysvnclone
git remote add origin git@example.com:project.git
git push origin master

그러면 git 저장소를 원래 프로젝트에 하위 모듈로 추가할 수 있습니다.

cd /path/to/gitproject
git submodule add git://example.com/project.git -- svn-project
git add svn-project
git commit -m "Add submodule"

svn:externals와 git 서브모듈 사이에는 한 가지 개념적 차이가 있는데, 만약 당신이 이것을 전복의 관점에서 접근한다면 당신을 넘어뜨릴 수 있습니다.git 서브모듈은 당신이 준 수정판에 고정되어 있습니다."upstream"이 변경되면 하위 모듈의 참조를 업데이트해야 합니다.

따라서 업스트림 서브버전과 재동기할 때:

cd /path/to/mysvnclone
git svn rebase
git push

... git 프로젝트는 우리가 이전에 약속했던 원래의 수정본을 여전히 사용할 것입니다.svn HEAD로 업데이트하려면 다음을 사용해야 합니다.

cd /path/to/gitproject/svn-project
git checkout master
git pull
cd ..
git add svn-project
git commit -m"Update submodule"

방금 이걸 겪었습니다.저는 rq와 비슷하지만 조금 다른 일을 하고 있습니다.필요한 svn 저장소의 git 클론을 호스팅하기 위해 서버 중 하나를 설정했습니다.제 경우에는 읽기 전용 버전만 원하고 서버에 베어 레포가 필요합니다.

내가 실행하는 서버에서:

GIT_DIR=<projectname>.git git init
cd <projectname>.git/
GIT_DIR=. git svn init svn://example.com/trunk
GIT_DIR=. git svn fetch
git gc

그러면 기본 레포가 설정되고, cron 스크립트를 통해 업데이트할 수 있습니다.

#!/usr/bin/python

import os, glob

GIT_HOME='/var/www/git'

os.chdir(GIT_HOME)
os.environ['GIT_DIR']='.'
gits = glob.glob('*.git')
for git in gits:
  if not os.path.isdir(git):
    continue
  os.chdir(os.path.join(GIT_HOME, git))
  if not os.path.isdir('svn/git-svn'):
    #Not a git-svn repo
    continue

  #Pull in svn updates
  os.system('git svn fetch && git gc --quiet')
  #fix-svn-refs.sh makes all the svn branches/tags pullable
  os.system('fix-svn-refs.sh')
  #Update the master branch
  os.system('git fetch . +svn/git-svn:master && git gc --quiet')`

이를 위해서는 http://www.shatow.net/fix-svn-refs.sh 의 fix-svn-refs.sh 도 필요합니다. 이는 대부분 다음에서 영감을 얻었습니다. http://gsocblog.jsharpe.net/archives/12

나는 왜 그것이git gc여기에 필요하지만, 나는 할 수 없었습니다.git pull없이.이

따라서 이 모든 것이 끝나면 rq의 지시에 따라 git 서브모듈을 사용할 수 있습니다.

현재 git-svnsvn:external을 지원하지 않습니다.그러나 다음과 같은 두 가지 다른 도구가 있습니다.

  1. 서브깃

    서브Git은 서버측 솔루션으로 서브버전 저장소에 대한 Git 액세스를 가능하게 하며, 그 반대의 경우도 가능합니다.자세한 내용은 설명서를 참조할 수 있지만 일반적으로 SubGit을 사용하는 것은 꽤 쉽습니다.

    $ subgit configure --layout auto $SVN_URL $GIT_REPO
    

    위 명령은 SVN 프로젝트에서 분기 레이아웃을 감지한 다음 SVN 프로젝트를 미러링할 준비가 된 빈 베어 깃 저장소를 만듭니다.자격 증명이 ~/.subversion 디렉토리의 SVN 자격 증명 캐시에 이미 저장되어 있지 않은 경우 자격 증명을 요청할 수 있습니다.도를 조정할 수도 .$GIT_REPO/subgit/authors.txtSVN 작성자 이름을 Git ID에 매핑합니다.

    $ subgit install $GIT_REPO
    $ ... let initial translation complete ... 
    $ TRANSLATION SUCCESSFUL
    

    지금 새로 만든 Git 저장소에 Subversion 저장소가 연결되어 있습니다.은 모든 SubGi은 SVN을 Git commit every합니다의 Git commit에서 commit로 합니다.svn commit고 Git에 SVN든다을한에은yn을dovtnvt한고t에n에든n은dygit push.

추가로 필요한 것은 Git 저장소를 커미터가 사용할 수 있도록 하는 것입니다.그것에 대해서 git-http-backend를 보세요.그러면 생성된 Git 저장소를 일반적인 서브모듈로 추가할 수 있습니다.SubGit은 Bitbucket Server의 추가 기능으로도 사용할 수 있으며 자세한 내용은 여기를 참조하십시오.따라서 git-svn과 같은 외부 도구를 사용할 필요가 없습니다.

SubGit은 독점 소프트웨어이지만 소규모 기업(최대 10명의 커밋), 학술 및 오픈 소스 프로젝트에 무료입니다.

  1. 스마트깃

    SmartGit은 클라이언트 측의 git-svn을 대체합니다.기능에 대한 자세한 정보는 여기에서 확인할 수 있습니다.

    특히 SmartGit은 git 서브모듈svn:external모두 지원하므로 저장소에서 이들을 혼합할 수 있습니다.

    SmartGit은 독점 소프트웨어이지만 비상업적인 용도로는 무료입니다.

rq가 말한 것 외에도, 다른 방법은 svn 외부 참조가 작동하는 방식을 더 잘 모방하는 타사 "외부" 프로젝트(http://nopugs.com/ext-tutorial), 를 사용하는 것입니다.외부를 사용하면 git 또는 svn 저장소를 추적할 수 있으며 변경 사항을 해당 저장소에 업스트림으로 푸시하는 것이 더 쉬워 보입니다.그러나 프로젝트 구성원이 별도의 패키지를 다운로드하여 설치해야 합니다.

저는 아직 서브모듈이나 외장재를 사용해 본 적이 없지만, 몇 시간 동안 모든 대안에 대해 읽었고 외장재가 제 요구에 더 잘 맞을 것 같습니다.Jon Loeliger(http://oreilly.com/catalog/9780596520120), 의 "Version Control with Git" 15장에 이러한 방법과 기타 사용자 지정 방법에 대한 훌륭한 논의가 있습니다.

Piston은 이를 지원하기 위해 다시 작성되고 있으며, 반대로 기존 Subversion URL과 Subversion 저장소 및 git+git에 추가되어 있습니다.

피스톤 깃허브 저장소를 확인합니다.

유감스럽게도 그것은 출시되지 않은 것 같습니다.

, 가 .git-remote-testsvn, 그래서 뭔가.

git submodule add testsvn::http://www.telegraphics.com.au/svn/bzquips/trunk/ \
    module/bzquips

효과가 있을 겁니다그런가요?

언급URL : https://stackoverflow.com/questions/465042/is-it-possible-to-have-a-subversion-repository-as-a-git-submodule