원격에서 다른 원격으로 분기를 Git push branch?
다음과 같은 원격이 설정되어 있습니다.
$ git remote
korg
rorg
그리고 다음 지점:
$ git branch -a
* (no branch)
remotes/korg/gingerbread
remotes/korg/gingerbread-release
remotes/korg/honeycomb
remotes/korg/honeycomb-mr1-release
remotes/korg/master
remotes/m/android-2.3.3_r1 -> refs/tags/android-2.3.3_r1a
remotes/m/gingerbread -> korg/gingerbread
이제 모든 원격 분기를 에서 원격으로 푸시하려고 합니다. 어떻게 하는 거지?
가급적 피할 수 있다면 각 먼저 로컬 분기를 만들지 않는 것이 좋습니다.
이걸 찾았어요
git push rorg 'refs/remotes/korg/*:refs/heads/*'
그리고 모든 원격 지점을 korg에서 org로 밀어넣었습니다(지점의 로컬 복사본 없이도).아래 출력을 참조하십시오.
Counting objects: 293, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (67/67), done.
Writing objects: 100% (176/176), 48.32 KiB, done.
Total 176 (delta 105), reused 168 (delta 97)
remote: Resolving deltas: 11% (12/105)
To <<MY_REPOSITORY_URL>>
* [new branch] korg/gingerbread-> gingerbread
* [new branch] korg/gingerbread-release -> gingerbread-release
* [new branch] korg/honeycomb-> honeycomb
* [new branch] korg/HEAD -> HEAD
* [new branch] korg/honeycomb-mr1-release-> honeycomb-mr1-release
* [new branch] korg/master -> master
그리고 나서 당신은 같은 방법을 사용할 수 있습니다.tags
참조:
git push rorg 'refs/tags/*:refs/tags/*'
일부 임시 저장소를 만드는 간단한 테스트를 통해 다음과 같은 작업을 수행할 수 있는 refspec을 구성할 수 있음을 알 수 있습니다.
$ git push rorg origin/one:refs/heads/one
Counting objects: 5, done.
Writing objects: 100% (3/3), 240 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /tmp/rorg
* [new branch] origin/one -> one
So 오리진/BranchNAME:refs/heads/BranchNAME
내 체크인rorg
원격:
pat@host /tmp/rorg (BARE:master)
$ git graph --all
* 5750bca (HEAD, master) c
| * 13fd55a (one) b
|/
* 822e0de a
Patthoyt의 답변을 보완하기 위해 원격에서 다른 원격으로 모든 분기를 푸시하는 짧은 셸 스크립트가 있습니다.
SRC_REMOTE=korg
DST_REMOTE=rorg
for a in $(git branch --list --remote "$SRC_REMOTE/*" | grep -v --regexp='->')
do git push "$DST_REMOTE" "$a:refs/heads/${a//$SRC_REMOTE\/}"
done
요약하자면, 소스 원격의 각 원격 분기(HEAD와 같은 "포인터" 분기 제외)에 대해 대상 원격에 대한 참조를 누릅니다.(그${a//$SRC_REMOTE\/}
bit는 분기 이름에서 소스 원격 이름을 제거합니다. 즉,origin/master
된다master
.)
이것은 Zsh에서 작동합니다.
경우에 따라 예기치 않은 매개 변수 확장을 방지하기 위해 단일 따옴표가 필요합니다.
git push rorg 'refs/remotes/korg/*:refs/heads/*'
실행할 스크립트에 대해 모든 변경 사항을 저장하거나 커밋하는 것이 좋습니다.
저는 원격지에서 다른 원격지로 여러 지점을 밀어야 했습니다.이러한 답변에는 이전에 로컬 지점이 존재해야 합니다.
SRC_R=origin1
DEST_R=origin2
for cbranch in $(git branch -r | grep $SRC_R | cut -d '/' -f2,3,4,5 | cut -d ' ' -f1)
do
git checkout $cbranch
git push $DEST_R $cbranch
done
origin1을 source remote로, origin2를 destination remote로 변경하기만 하면 됩니다.이것을 "remoteBranchCloner.sh "에 복사하고 "sh callBranchCloner.sh "을 사용하여 이름을 붙입니다.
여러 번 밀지 않는 더 좋은 방법이 있을 수 있습니다.
내 코드를 사용하는 경우 자격 증명 캐싱을 사용하고 싶을 수 있습니다. 그렇지 않으면 자격 증명을 여러 번 입력해야 합니다.
창:
참고: 이 스크립트는 Linux용입니다."gitbash"에서 실행하면 스크립트가 작동하지만 특별한 것을 설치하지 않고는 네이티브 콘솔에서 실행할 수 없습니다.
git config [--global] credential.helper wincred
리눅스의 경우
git config [--global] credential.helper cache
여기서 [--global]은 선택적으로 추가 --global을 의미합니다.
모든 분기에 대한 원격 추적을 새 원격으로 설정하려면 다음을 수행합니다.
DEST_R=remotename
for cbranch in `git branch`
do
git checkout $cbranch
git branch -u guru/$cbranch
done
.sh 파일로 저장되고 "sh filename.sh "과 함께 실행되면 원격 'remote name'을 추적하도록 모든 업스트림이 설정됩니다.
의 분때 에.HEAD
이전 답변에서 분기를 생성하는 가장 깨끗한 방법은 맨 저장소로 복제한 다음 다음과 같이 모든 분기를 원격으로 푸시하는 것입니다.
git clone --bare <from-repository>
cd <from-repo-dir>
git push --set-upstream <to-repository> --all
git push --set-upstream <to-repository> --tags
언급URL : https://stackoverflow.com/questions/7818927/git-push-branch-from-one-remote-to-another
'it-source' 카테고리의 다른 글
파이썬으로 화면을 지우는 방법 (0) | 2023.08.09 |
---|---|
도커 구성 시작 "오류: 시작할 컨테이너가 없습니다" (0) | 2023.08.09 |
오류: 기본 엔진이 지정되지 않았으며 확장 기능이 제공되지 않았습니다. (0) | 2023.08.09 |
apk는 이전 버전과 동일한 인증서로 서명되어야 합니다. (0) | 2023.08.09 |
VS Code에서 통합 터미널을 별도의 창에서 열 수 있습니까? (0) | 2023.08.09 |