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

Git-clone

Git-svn

Author: Lernkurve, 2009-04-14

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.

 217
Author: Paul,
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.

 85
Author: Christian,
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     
 27
Author: jonathan.cone,
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