Problem
Jak tworzysz płytką kopię za pomocą git-svn z repozytorium Subversion, np. Jak wyciągasz tylko trzy ostatnie wersje?
git clone
Polecenie może dostać ostatnie n wersje z repozytorium Git przypadku korzystania z opcji --depth
, tj masz płytkie kopię repozytorium. Przykład:
git clone --depth 3 git://some/repo myshallowcopyrepo
Czy istnieje podobna opcja dla git-svn?
Moje dotychczasowe odkrycia
Do tej pory znalazłem tylko -rN
opcję, w której N
można pobrać wersję. Przykład:
git svn clone -rN svn://some/repo
Zgodnie z dokumentacją istnieje możliwość korzystania -r$REVNUMBER:HEAD
. Wypróbowałem następujące, aby uzyskać ostatnie 3 wersje, 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
Zastąpiłem HEAD~3
więc faktyczną liczbą trzeciej, ale ostatniej wersji 534. To zadziałało, ale to wymaga ode mnie, aby najpierw ustalić numer wersji trzeciego, ale ostatniego zatwierdzenia.
$ git svn clone --prefix=svn/ -s -r534:HEAD http://some/svn/repo .
Dokumentacja
-s is for --stdlayout which presumes the svn recommended layout for tags, trunk, and branches.
(ale nie zadziałało dla mnie)--depth
zagit svn
, ponieważ wsparcie jest już tam. I musi już znaleźć najnowszą wersję z serwera?Odpowiedzi:
Odkryłeś już najprostszy sposób określenia płytkiego klonu w Git-SVN, określając numer wersji SVN, od którego chcesz rozpocząć klonowanie (
-r$REV:HEAD
).Na przykład:
git svn clone -s -r1450:HEAD some/svn/repo
Struktura danych Git opiera się na wskaźnikach na ukierunkowanym wykresie acyklicznym (DAG), co sprawia, że powrót
n
zatwierdzeń jest banalny . Ale w SVN (a zatem w Git-SVN) musisz sam znaleźć numer wersji.źródło
git-svn
pilot wskazujący w tym samym miejscu i używając,git-svn fetch
aby uzyskać więcej drzewa. W tym momencie musisz użyćgit filter-branch
do odtworzenia starego (częściowego) drzewa na prawej gałęzi.n
zatwierdzeń ...Często używam następujących opcji, aby uzyskać ograniczoną liczbę poprawek z naszego ogromnego drzewa subversion (wkrótce osiągamy wersję svn 35000).
Dobrym sposobem, aby dowiedzieć się, gdzie powstała gałąź, jest zrobienie
svn log
tego i znalezienie pierwszego w gałęzi (ostatniego wymienionego podczas wykonywania):Do tej pory tak naprawdę nie uważałem, że warto było śledzić wszystkie gałęzie. Sklonowanie, svn i git nie działają razem tak dobrze, jak bym chciał. Zwykle tworzę pliki łatek i stosuję je na klonie git innej gałęzi svn.
źródło
cherry-pick
/rebase
między nimi. Zatwierdź robi dodatkowy krok (push
następniedcommit
zdalne repo), ale myślę, że warto go wymienić.... 7 lat później na pustyni wieje tumana przez ...
Nie byłem zadowolony z zaakceptowanej odpowiedzi, dlatego stworzyłem dla Ciebie kilka skryptów dostępnych na Github . Powinny one pomóc każdemu, kto chce użyć,
git svn clone
ale nie chce sklonować całego repozytorium i nie chce szukać konkretnej wersji w celu sklonowania w środku historii (być może klonujesz kilka repozytoriów). Tutaj możemy po prostu sklonować ostatnie N wersji:Służy
git svn clone
do klonowania ostatnich 50 wersjiZnajdź poprzednią wersję N z repozytorium SVN
źródło