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.
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"
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.
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:
-
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żdymgit 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.
-
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.
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.
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.
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ę?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