Jak sklonować git-svn Ostatnie N wersji z repozytorium Subversion?
Problem
Jak utworzyć płytką kopię za pomocą git-svn z repozytorium Subversion, np. jak pobrać tylko trzy ostatnie wersje?
Polecenie git clone
może pobrać Ostatnie N wersji z repozytorium Git, jeśli użyjesz opcji --depth
, tzn. otrzymasz płytką kopię repozytorium. Przykład:
git clone --depth 3 git://some/repo myshallowcopyrepo
Czy istnieje podobna opcja dla git-svn?
Moje dotychczasowe odkrycia
Póki co znalazłem tylko -rN
opcję gdzie N
jest rewizją do ściągnięcia. Przykład:
git svn clone -rN svn://some/repo
Zgodnie z dokumentacją istnieje możliwość użycia -r$REVNUMBER:HEAD
. Próbowałem wykonać następujące czynności, aby uzyskać ostatnie wersje 3, które zwróciły komunikat o błędzie.
$ git svn clone --prefix=svn/ -s -rHEAD~3:HEAD http://some/svn/repo .
revision argument: HEAD~3:HEAD not understood by git-svn
Więc zastąpiłem HEAD~3
rzeczywistą liczbą trzeciej, ale ostatniej wersji 534. Zadziałało, ale to wymaga ode mnie najpierw ustalenia numeru wersji trzeciej, ale ostatniej / align = "left" /
$ git svn clone --prefix=svn/ -s -r534:HEAD http://some/svn/repo .
Dokumentacja
3 answers
Odkryłeś już najprostszy sposób na określenie płytkiego klonu w Git-SVN, podając numer wersji SVN, od którego chcesz rozpocząć klon ( -r$REV:HEAD
).
Na przykład: git svn clone -s -r1450:HEAD some/svn/repo
Struktura danych Gita opiera się na wskaźnikach w ukierunkowanym grafie acyklicznym (dag), co sprawia, że przejście wstecz n
commity jest trywialne. Ale w SVN (a więc i w Git-SVN) będziesz musiał sam znaleźć numer wersji.
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-07-23 17:27:03
Często korzystam z poniższych wskazówek, aby uzyskać ograniczoną liczbę wersji z naszego ogromnego drzewa subversion (wkrótce osiągamy wersję svn 35000).
# checkout a specific revision
git svn clone -r N svn://some/repo/branch/some-branch
# enter it and get all commits since revision 'N'
cd some-branch
git svn rebase
I dobrym sposobem, aby dowiedzieć się, gdzie zaczyna się gałąź, jest zrobienie svn log
i znalezienie pierwszego na gałęzi (ostatniego na liście podczas robienia):
svn log --stop-on-copy svn://some/repo/branch/some-branch
Do tej pory nie znalazłem kłopotów warto w śledzeniu wszystkich gałęzi. Klonowanie zajmuje zbyt dużo czasu, a svn i git nie działają tak dobrze jak ja na przykład. Mam tendencję do tworzenia łatek i stosowania ich na git clone innej gałęzi svn.
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-02-27 19:26:26
... 7 lat później, na pustyni, wieje tumbleweed...
Nie byłem zadowolony z zaakceptowanej odpowiedzi, więc stworzyłem kilka skryptów, aby to zrobić dla Ciebie dostępnych na Githubie. Powinny one pomóc każdemu, kto chce używać git svn clone
, ale nie chce sklonować całego repozytorium i nie chce polować na konkretną wersję do sklonowania w środku historii(być może klonujesz kilka repozytoriów). Tutaj możemy po prostu sklonować Ostatnie N wersje:
Użyj git svn clone
, aby sklonować ostatnie 50 wersji
# -u The SVN URL to clone
# -l The limit of revisions
# -o The output directory
./git-svn-cloneback.sh -u https://server/project/trunk -l 50 -o myproj --authors-file=svn-authors.txt
Znajdź poprzednią wersję N z repo SVN
# -u The SVN URL to clone
# -l The limit of revisions
./svn-lookback.sh -u https://server/project/trunk -l 5
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-02-26 20:31:32