Czy możliwe jest posiadanie repozytorium Subversion jako podmodule Git?

Czy istnieje sposób na dodanie repozytorium Subversion jako submodule Git w moim repozytorium Git?

Coś w stylu:

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

Gdzie https://svn.foo.com/svn/proj wskazuje na repozytorium Subversion.

Wiem, że istnieje git-svn, która pozwala na interakcję z repozytorium Subversion. Tak sobie myślę, że może istnieje sposób, aby sprawdzić repozytorium Subversion za pomocą git-svn, a następnie użyć go jako podmodułu.

Author: BuZZ-dEE, 2009-01-21

6 answers

Nie. Najlepiej byłoby skonfigurować mirror repozytorium svn w dedykowanym repozytorium git.

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

Następnie możesz dodać repozytorium git jako podmodule do oryginalnego projektu

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

Istnieje jedna koncepcyjna różnica między svn: externals i GIT submodule, która może cię potknąć, jeśli podejdziesz do tego z punktu widzenia subversion. Podmodule git jest powiązany z poprawką, którą mu podajesz. Jeśli zmieni się "upstream", musisz zaktualizować swoje podmodule Referencja.

Więc kiedy resync z upstream subversion:

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

... projekt git nadal będzie używał oryginalnej wersji, którą wcześniej wprowadziliśmy. Aby zaktualizować do głowicy svn, musisz użyć

cd /path/to/gitproject/svn-project
git checkout master
git pull
cd ..
git add svn-project
git commit -m"Update submodule"
 125
Author: richq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-08 09:37:40

Właśnie przez to przechodziłam. Robię coś podobnego do rq, ale nieco innego. Skonfigurowałem jeden z moich serwerów do hostowania tych klonów Git z repozytoriów svn, których potrzebuję. W moim przypadku chcę tylko wersje Tylko do odczytu i potrzebuję nagiego repo na serwerze.

Na serwerze uruchamiam:

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

To ustawia moje nagie repo, potem mam skrypt cron, aby go zaktualizować:

#!/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')`

Wymaga to również fix-svn-refs.sh od http://www.shatow.net/fix-svn-refs.sh To było głównie inspirowane autor: http://gsocblog.jsharpe.net/archives/12

Nie jestem pewien, dlaczego git gc jest tutaj potrzebny, ale nie byłem w stanie zrobić git pull bez niego.

Więc po tym wszystkim możesz użyć git submodule zgodnie z instrukcjami rq.

 8
Author: sherbang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-07 11:32:01

Obecnie git-svn nie obsługuje svn:externals . Ale są dwa inne narzędzia, które mogą Ci pomóc:

  1. SubGit

    SubGit jest rozwiązaniem po stronie serwera, umożliwia Gitowi dostęp do repozytorium Subversion i odwrotnie. Więcej szczegółów można znaleźć w documentation, ale ogólnie jest to dość łatwe w użyciu SubGit:

    $ subgit configure --layout auto $SVN_URL $GIT_REPO
    

    Powyższe polecenie wykryje układ gałęzi w projekcie SVN, a następnie utworzy puste repozytorium Git gotowe do odbicia projektu SVN. Możesz zostać poproszony o poświadczenia, chyba że są one już zapisane w pamięci podręcznej poświadczeń SVN w~/.katalog subversion. Możesz również dostosować $GIT_REPO/subgit/authors.txt do mapowania nazw autorów SVN do tożsamości Gita.

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

    W tej chwili masz repozytorium Subversion podłączone do nowo utworzonego repozytorium Git. SubGit tłumaczy rewizję SVN na git commit na każdym svn commit i Git commit na SVN revision na każdym git push.

Wszystko, czego potrzebujesz, to udostępnienie repozytorium Git dla komend. Spójrz na Git-http-backend . Następnie możesz dodać utworzone repozytorium Git jako zwykły podmoduł. SubGit jest również dostępny jako dodatek do serwera Bitbucket, aby dowiedzieć się więcej sprawdź tutaj . Nie ma więc potrzeby używania żadnych zewnętrznych narzędzi, takich jak git-svn czy jakiekolwiek inne.

SubGit jest oprogramowaniem prawnie zastrzeżonym, ale jest darmowy dla małych firm (do 10 osób), projekty akademickie i open-source.

  1. SmartGit

    SmartGit zastępuje git-svn po stronie klienta. Więcej informacji na temat jego funkcji można znaleźć tutaj .

    W szczególności SmartGit obsługuje zarówno podmoduły git jak i svn:externals , można je mieszać w repozytorium.

    SmartGit jest oprogramowaniem własnościowym, ale jest darmowy do użytku niekomercyjnego.

 5
Author: vadishev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-29 20:15:52

Oprócz tego, co powiedział rq, inną metodą byłoby użycie zewnętrznego projektu "externals" ( http://nopugs.com/ext-tutorial ), które lepiej naśladują działanie zewnętrznych odniesień svn. Z zewnętrznymi repozytoriami można śledzić zarówno git, jak i svn, i wydaje się, że łatwiej jest wypchnąć zmiany pod prąd do tych repozytoriów. Wymaga jednak od członków projektu pobrania i zainstalowania oddzielnego pakietu.

Nie używałem jeszcze podmodułów ani zewnętrznych; jednak spędziłem kilka godzin czytając o wszystkich alternatywach i wygląda na to, że zewnętrzne będą lepiej dopasowane do moich potrzeb. Istnieje doskonała dyskusja na temat tych i innych niestandardowych metod w rozdziale 15 "Kontrola wersji z Git", autorstwa Jona Loeligera ( http://oreilly.com/catalog/9780596520120 ), co zdecydowanie polecam.

 4
Author: pcuenca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-18 17:58:11

Tłok jest przepisywany w celu wsparcia tego, i converse, plus istniejący Url Subversion w repoistory Subvresion i git+git.

Sprawdź tłokowe repozytorium Github .

Niestety wydaje się, że nie został wydany.

 0
Author: Otto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-21 18:45:39

Cóż, jest git-remote-testsvn, więc chyba coś w stylu

git submodule add testsvn::http://www.telegraphics.com.au/svn/bzquips/trunk/ \
    module/bzquips
Powinno zadziałać. Naprawdę?
 0
Author: mcepl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-22 21:22:56