repo를 가져온 후 생성된 원격 분기에 대해 git-svn에 어떻게 알립니까?
는 중용사를 합니다.git-svn
회사의 중앙 서브버전 저장소를 상대로 작업합니다.최근에 중앙 저장소에 새 피쳐 분기를 만들었습니다.
어떻게 Git에게 그것에 대해 말합니까?가 행할때실을 할 때.git branch -r
실행할 때 존재했던 가지만 보입니다.fetch
내 Gitrepo를 초기화하기 위해 Subversion repo에 대항하는 것?
원격 분기를 수동으로 추가할 수 있습니다.
git config --add svn-remote.newbranch.url https://svn/path_to_newbranch/
git config --add svn-remote.newbranch.fetch :refs/remotes/newbranch
git svn fetch newbranch [-r<rev>]
git checkout -b local-newbranch -t newbranch
git svn rebase newbranch
모든 원격 svn 분기를 추적하려는 경우 솔루션은 다음과 같이 간단합니다.
git svn fetch
아직 가져오지 않은 모든 원격 분기를 가져옵니다.
추가 팁: 처음에는 트렁크만 체크아웃하고 나중에 모든 분기를 추적하려면 편집.git/config
이게보다것달리는시이고렇것run-▁to▁look달는리▁re다▁and.git svn fetch
:
[svn-remote "svn"]
url = https://svn/path_to_repo_root/
fetch = path_to_trunk:refs/remotes/git-svn
branches = path_to_branches/*:refs/remotes/*
은 중한점은입니다.url
저장소 를 가리키며, " " " " " 에 를 가리켜야 .fetch
그리고.branches
는 상대적어합니다야이에 .url
.
ALL 대신 특정 분기만 가져오려면 에 좋은 예가 있습니다.git svn --help
:
[svn-remote "huge-project"]
url = http://server.org/svn
fetch = trunk/src:refs/remotes/trunk
branches = branches/{red,green}/src:refs/remotes/branches/*
tags = tags/{1.0,2.0}/src:refs/remotes/tags/*
의 전이버우와 함께 git-svn
수 수도 .git svn fetch
가지 방법은 더 한가해방법것다를 추가하는 입니다.fetch
다음과 같은 선:
[svn-remote "huge-project"]
url = http://server.org/svn
fetch = trunk/src:refs/remotes/trunk
fetch = branches/blue:refs/remotes/branches/blue
fetch = branches/yellow:refs/remotes/branches/yellow
branches = branches/{red,green}/src:refs/remotes/branches/*
@또 다른 해결 : @AndyEstes 또른해결방: .git/svn/.metadata
을 변경합니다.branches-maxRev
또는tags-maxRev
새로 지정한 분기 또는 태그가 생성되기 전의 개정판입니다.한 후에는 실면완하료을업실을 실행합니다.git svn fetch
새 svn 원격 지점을 추적합니다.
제가 필요했던 것 같습니다.git svn fetch
어떻게든 저는 단지 변화가 아닌 전체 레포를 가져올 것이라고 스스로 확신했습니다.
내가 어떻게든 망친 것 같은데 vjangus의 답변에 있는 지시사항을 따랐더니 거의 효과가 있었습니다.유일한 문제는 새로운 지점이 트렁크에서 분기된 것 같지 않다는 것입니다.Gitk에서, 그것은 일종의 "떠다니는" 것이었습니다; 그것은 트렁크와 공통 조상이 없었습니다.
이에 대한 솔루션은 다음과 같습니다.
- 분기가 생성되기 전 트렁크에서 발생한 마지막 커밋의 SHA1을 찾습니다.
- 새 분기에서 첫 번째 커밋의 SHA1을 찾습니다(아마도 메시지는 "Create new branch, copyed from trunk@12345" 등).
git diff-tree <sha1 from step 1> <sha1 from step 2>
출력이 없어야 합니다.출력이 있으면 커밋을 잘못 선택했을 수 있습니다.git checkout local-newbranch
그리고나서git rebase <sha1 from step 1>
기본값이 변경됩니다.local-newbranch
위에 새나무 에위그러나▁but▁the.remotes/newbranch
연결이 계속 끊어집니다.- 로 합니다.
.git/refs/remotes/newbranch
새 커밋의 전체 SHA1을 포함하도록 편집(리베이스)newbranch
( 사용할 도 있습니다.)git-update-ref refs/remotes/newbranch <new-SHA>
감사합니다.) - 다음에 당신이
git svn dcommit
newbranch
로그를 업데이트한다는 내용의 메시지가 많이 표시됩니다.제 생각엔 이게 정상인 것 같아요.
▁recommend▁keeping▁i합보를 유지하는 것을 추천합니다.gitk --all
항상 열고 자주 새로 고쳐야 하는 작업을 추적할 수 있습니다.저는 아직 git과 gitsvn에 익숙하지 않아서 이 방법의 개선점을 제안해주세요.
vjangus의 답변 단순화:
SVN에서 표준 레이아웃을 사용하고 있고 일반적인 svn init을 수행한 경우 git-svn이 구성 작업을 수행합니다.정당:
- SVN에서 분기 복사본 리비전 찾기
- git-svn을 사용하여 해당 개정판 가져오기
- 새 로컬 분기 추적 원격 만들기
은 "SVN url"svn+ssh://gil@svn.myplace.com/repo
제가 있는 은 SVN 지점입니다.newbranch
분기 컬로원분기추격적원iting분▁(기)(추▁local적격로tracknewbranch
) 될 것입니다.git-newbranch
.
1단계: 분기-복사본 개정판 찾기
svn log --stop-on-copy svn+copy://gil@svn.myplace.com /repo/cisco/newbranch | tail -4r7802 | 누군가 | 2014-03-21 18:54:58 +0000 (2014년 3월 21일 금요일) | 1줄 분기 HEAD를 새 분기로------------------------------------------------------------------------
따라서 SVN의 분기점은 개정 7802입니다.
2단계: 수정본 가져오기
git svn fetch -r 7802가능한 지점 발견: svn+branch://gil@svn.myplace.com /repo/repo=> svn+branch://gil@svn.myplace.com /repo/repo/newbranch, 7801발견된 분기 상위: (refs/remote/trunk) 8dcf3c5793ff1a8a79dc94d268c91c2bf388894ado_switch를 사용하여 상위 항목을 따릅니다.상위 항목을 성공적으로 팔로우했습니다.r7802 = 9bbd4194041675ca5c9c6f3917e05ca5654a8a1e (refs/remote/신규지점)
git-knn은 모든 작업을 수행했고 이제 원격에 대해 알고 있습니다.
git show-ref | grep 새 지점2df23af4733f36f5ad3c14cc1fa582ceb3edb5cref/원격/새 지점
3단계: 원격 지점을 추적하는 새 로컬 지점을 만듭니다.
git checkout - bit-new branch - t new branch파일 체크아웃: 100%(413/413) 완료. 분기 git - 로컬 참조/원격/새 분기를 추적하기 위해 설정된 새 분기. 새 지점 'git-new 지점'으로 전환
이 기능에 대한 설명서를 찾지 못했지만 gitsvn 구성이 여러 개의 가져오기 항목을 지원하는 것 같습니다.이렇게 하면 구성에 다른 원격 svn 리포지토리 항목을 추가하거나 와일드카드를 사용하여 특정 디렉터리의 모든 분기를 가져올 필요 없이 분기를 별도로 추가할 수도 있습니다.
SVN 트리가 더 많은 분기를 포함하는 분기 및 하위 디렉터리와 같이 분기가 위치하는 논리 없이 많은 분기가 있는 경우를 가정합니다.
예.
trunk
branches
-> branch1
-> sub-dir1
-> branch2
-> branch3
-> sub-dir2
-> branch4
-> sub-dir3
-> branchX
<... hundreds more ...>
Git 저장소에 포함할 분기 중 일부를 직접 선택하기만 하면 됩니다.
먼저 추가 분기 없이 트렁크만 사용하여 리포지토리를 초기화할 수 있습니다.
git svn clone -r 10000:HEAD https://svn.com/MyRepo myrepo --prefix=svn/ --trunk=trunk
그런 다음 다음 구성이 표시됩니다.
localhost: elhigu$ git config --get-regexp "svn-remote."
svn-remote.svn.url https://svn.com/MyRepo
svn-remote.svn.fetch trunk:refs/remotes/svn/trunk
MyRepo에서 새 분기를 가져오려면 다음과 같이 구성에 새 가져오기 항목을 추가하면 됩니다.
git config --add svn-remote.svn.fetch branches/sub-dir2/branch4:refs/remotes/svn/branches/sub-dir2/branch4
또는 .git/config에서 동일한 구성을 편집할 수 있습니다.
새 분기를 구성에 추가한 후 가져오려면 그냥 실행하십시오.
git svn fetch -r 10000:HEAD
[편집] 때때로 새로 추가된 분기를 가져오기 위해 --all 매개 변수로 fetch를 실행해야 하는 것처럼 보입니다.
git svn fetch --all -r 10000:HEAD
git-svn 퀘이크를 처리하는 대신 SubGit을 사용할 수 있습니다.
SubGit를 Subversion 저장소에 설치해야 합니다.그런 다음 특수 git-svn 명령을 사용하는 대신 표준 git 워크플로우를 사용할 수 있습니다.
새 커밋 푸시:
git-signn:
$ git commit $ git svn rebase $ git svn dcommit
SubGit:
$ git commit $ git push
들어오는 변경 내용을 가져오는 중
git-signn:
$ git svn rebase
SubGit:
$ git pull [--rebase]
새 분기 만들기:
git-signn:
$ git svn branch foo $ git checkout -b foo -t remotes/foo $ git commit $ git svn dcommit
SubGit:
$ git checkout -b foo $ git commit $ git push
자세한 내용은 SubGit 설명서를 참조하십시오.
도움이 된 vjangus의 답변을 덧붙이자면, 적절한 지점에서 가지를 트렁크에 묶는 깃 그래프를 추가하는 것이 유용하다는 것을 알게 되었습니다. 깃 그래프를 사용하여 깃 그래프를 사용하면 깃이 기록을 보고 병합을 올바르게 수행할 수 있습니다.
이것은 단순히 다음에 줄을 추가하는 경우입니다..git/info/grafts
해시와 함께:
<initial branch commit> <parent commit in trunk>
예를 들면
378b0ae0902f5c2d2ba230c429a47698810532e5 6c7144991381ce347d4e563e9912465700be0638
http://evan-tech.livejournal.com/255341.html 에 크레딧 추가
(저는 이것을 논평으로 추가하고 싶지만, 저는 충분한 평판을 가지고 있지 않습니다.
유효한 레이아웃으로 체크아웃하지 않으면 원격 지점을 체크아웃할 수 없습니다.
제가 하는 일은 다음과 같습니다.
git svn init -s <svn path with no trunk> local_repo
cd local_repo
git svn fetch
## wait
그런 다음 원격 분기로 전환할 수 있습니다.
git checkout --track -b branch_name branch_name
그러면 자동으로 지점으로 전환됩니다.
언급URL : https://stackoverflow.com/questions/296975/how-do-i-tell-git-svn-about-a-remote-branch-created-after-i-fetched-the-repo
'programing' 카테고리의 다른 글
Angular FormArray 디스플레이 유효성 검사 오류 (0) | 2023.07.08 |
---|---|
Multipart POST 요청에 대한 TestRestTemplate와의 통합 테스트에서 400을 반환합니다. (0) | 2023.07.08 |
"for(;;)"는 무엇을 의미합니까? (0) | 2023.07.08 |
gcc가 사용하지 않는 정적 라이브러리를 연결하도록 강제하는 방법 (0) | 2023.07.08 |
워드프레스에서 레이저페이 결제 게이트웨이를 통합하는 방법 (0) | 2023.07.03 |