Programing

Subversion 저장소에서 마지막 n 개정을 git-svn 복제하는 방법은 무엇입니까?

lottogame 2020. 3. 11. 00:43
반응형

Subversion 저장소에서 마지막 n 개정을 git-svn 복제하는 방법은 무엇입니까?


문제

Subversion 저장소에서 git-svn을 사용하여 얕은 사본을 작성하는 방법, 예를 들어 마지막 세 개의 개정 만 가져 오는 방법은 무엇입니까?

git clone옵션을 사용하는 경우 명령은 Git 저장소에서 마지막 n 개의 개정판 --depth을 가져올 수 있습니다 . 즉, 저장소의 단순 사본을 얻습니다. 예:

git clone --depth 3 git://some/repo myshallowcopyrepo

git-svn에 비슷한 옵션이 있습니까?

지금까지 나의 발견

지금까지 개정판을 -rN어디 N에서 가져올 지 옵션을 찾았습니다 . 예:

git svn clone -rN svn://some/repo

설명서에 따르면 사용할 가능성이 있습니다 -r$REVNUMBER:HEAD. 오류 메시지를 반환 한 마지막 3 개정을 얻으려면 다음을 시도했습니다.

$ git svn clone --prefix=svn/ -s -rHEAD~3:HEAD http://some/svn/repo .
revision argument: HEAD~3:HEAD not understood by git-svn

그래서 나는 HEAD~3세 번째이지만 마지막 개정 534의 실제 수로 교체 했습니다. 그것은 효과가 있었지만, 먼저 세 번째이지만 마지막 커밋의 개정 번호를 알아 내야합니다.

$ git svn clone --prefix=svn/ -s -r534:HEAD http://some/svn/repo .

선적 서류 비치

자식 클론

git-svn


( -r$REV:HEAD) 에서 복제를 시작하려는 SVN 개정 번호를 지정하여 Git-SVN에서 얕은 복제본을 지정하는 가장 간단한 방법을 이미 발견했습니다 .

예를 들면 다음과 같습니다. git svn clone -s -r1450:HEAD some/svn/repo

Git의 데이터 구조는 DAG (directed acyclic graph)의 포인터를 기반으로하므로 n커밋을 다시 수행하는 것이 쉽지 않습니다. 그러나 SVN (따라서 Git-SVN)에서는 개정 번호를 직접 찾아야합니다.


거대한 Subversion 트리에서 제한된 수의 개정판을 얻기 위해 다음을 자주 사용합니다 (곧 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

그리고 지점이 시작된 지점을 찾는 좋은 방법은 지점을 시작하고 지점 svn log에서 첫 번째 지점을 찾는 것입니다 (마지막으로 수행 할 때 나열).

svn log --stop-on-copy svn://some/repo/branch/some-branch

지금까지 모든 지점을 추적 할 때 번거 로움을 찾지 못했습니다. 복제하는 데 너무 많은 시간이 걸리고 svn과 git은 내가 원하는만큼 잘 작동하지 않습니다. 패치 파일을 만들어 다른 svn 브랜치의 자식 복제본에 적용하는 경향이 있습니다.


... 7 년 후, 사막에서 다니는 바람에 ...

나는 받아 들여진 대답에 만족하지 않았기 때문에 Github에서 사용할 수 있는 스크립트를 만들었습니다 . 이것들은 사용하고 git svn clone싶지만 전체 저장소를 복제하고 싶지 않고 역사 중간에 복제 할 특정 개정을 찾고 싶지 않은 사람을 도울 것입니다 (아마도 많은 저장소를 복제하고 있습니다). 여기서 우리는 마지막 N 개정을 복제 할 수 있습니다.

git svn clone마지막 50 개 개정판을 복제하는 데 사용

# -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

SVN 저장소에서 이전 N 개정 찾기

# -u    The SVN URL to clone
# -l    The limit of revisions

./svn-lookback.sh -u https://server/project/trunk -l 5     

참고 URL : https://stackoverflow.com/questions/747075/how-to-git-svn-clone-the-last-n-revisions-from-a-subversion-repository

반응형