Git - 코드를 두 개의 리모컨으로 푸시
리모트 git 저장소가 2개 있습니다. origin
그리고.github
나뭇가지를 밀다devel
두 저장소 모두에 적용.
git push -u origin devel
git push -u github devel
하지만 그때, 내가 했을 때. git push
로만 밀려날 것이다.github
.
두 개의 리모컨을 설정하여 하나의 명령어로 두 개의 저장소로 변경 내용을 푸시할 수 있는 방법이 있습니까?
최근 Git 버전에서는 여러 개를 추가할 수 있습니다.pushurl
특정 리모트용입니다.다음을 사용하여 두 개를 추가합니다.pushurl
고객님의origin
:
git remote set-url --add --push origin git://original/repo.git
git remote set-url --add --push origin git://another/repo.git
그래서 당신이 강요할 때origin
양쪽 저장소에 푸시됩니다.
업데이트 1: Git 1.8.0.1 및 1.8.1(및 기타 버전)에 원인이 되는 버그가 있는 것 같습니다.--add
처음 사용할 때 원래 URL을 대체하기 위해 동일한 명령을 사용하여 원래 URL을 다시 추가해야 합니다.하고있다git remote -v
그럼 각 리모트의 현재 URL이 표시됩니다.
업데이트 2: Junio C.Git의 관리자인 하마노는 그것이 어떻게 설계되었는지를 설명했다.하고있다git remote set-url --add --push <remote_name> <url>
를 추가합니다.pushurl
push 기본 URL을 덮어씁니다.단, 여러 개를 추가할 수 있습니다.pushurl
1개의 리모트에 대해서, 1개의 리모트로 복수의 리모트에 의해, 1개의 리모트를 사용해 복수의 리모트에 푸시 할 수 있습니다.git push
이 동작은 다음과 같이 확인할 수 있습니다.
$ git clone git://original/repo.git
$ git remote -v
origin git://original/repo.git (fetch)
origin git://original/repo.git (push)
$ git config -l | grep '^remote\.'
remote.origin.url=git://original/repo.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
이제 하나의 명령을 사용하여 두 개 이상의 리포지토리에 푸시하려면 다음과 같은 이름의 새 리모트를 만들 수 있습니다.all
(@Adam Nelson의 코멘트에서 제안) 또는 계속 사용origin
단, 후자의 이름은 이 목적을 위해 설명되지 않습니다.계속 사용하시려면origin
, 다음 단계를 건너뛰고 를 사용합니다.origin
대신all
다른 모든 단계에서.
그럼 새로운 리모콘을 추가해 보겠습니다.all
나중에 여러 저장소에 푸시할 때 참조할 수 있습니다.
$ git remote add all git://original/repo.git
$ git remote -v
all git://original/repo.git (fetch) <-- ADDED
all git://original/repo.git (push) <-- ADDED
origin git://original/repo.git (fetch)
origin git://original/repo.git (push)
$ git config -l | grep '^remote\.all'
remote.all.url=git://original/repo.git <-- ADDED
remote.all.fetch=+refs/heads/*:refs/remotes/all/* <-- ADDED
그럼 a를 추가해 봅시다.pushurl
에게all
원격, 다른 저장소를 가리킵니다.
$ git remote set-url --add --push all git://another/repo.git
$ git remote -v
all git://original/repo.git (fetch)
all git://another/repo.git (push) <-- CHANGED
origin git://original/repo.git (fetch)
origin git://original/repo.git (push)
$ git config -l | grep '^remote\.all'
remote.all.url=git://original/repo.git
remote.all.fetch=+refs/heads/*:refs/remotes/all/*
remote.all.pushurl=git://another/repo.git <-- ADDED
여기서git remote -v
새로운 것을 표시하다pushurl
밀기 위해서라면git push all master
, 이것은, 을 푸시합니다.master
로 분기하다.git://another/repo.git
이것만. 이것은 어떻게pushurl
는 기본 URL(remote.all.url)을 덮어씁니다.
이제 하나 더 추가해 봅시다.pushurl
원래 저장소를 가리킵니다.
$ git remote set-url --add --push all git://original/repo.git
$ git remote -v
all git://original/repo.git (fetch)
all git://another/repo.git (push)
all git://original/repo.git (push) <-- ADDED
origin git://original/repo.git (fetch)
origin git://original/repo.git (push)
$ git config -l | grep '^remote\.all'
remote.all.url=git://original/repo.git
remote.all.fetch=+refs/heads/*:refs/remotes/all/*
remote.all.pushurl=git://another/repo.git
remote.all.pushurl=git://original/repo.git <-- ADDED
둘 다 보여?pushurl
추가한 것은 유지됩니다.이제 싱글은git push all master
를 푸시합니다.master
양쪽에 분기하다git://another/repo.git
그리고.git://original/repo.git
.
중요: 리모트에 푸시를 받아들이거나 거부하는 규칙(훅)이 있는 경우, 한쪽 리모컨이 푸시를 받아들이지만 다른 한쪽 리모컨은 받아들이지 않을 수 있습니다.따라서 동일한 이력을 가지려면 로컬에서 커밋을 수정하여 원격에서 허용하고 다시 푸시해야 합니다. 그렇지 않으면 이력을 다시 쓰는 것만으로 수정할 수 있는 상황이 될 수 있습니다(사용).push -f
이전 변경 내용을 이미 Repo에서 삭제한 사용자에게 문제가 발생할 수 있습니다.
하나의 명령어로 양쪽 리모트에 송신하려면 , 리모트용의 에일리어스를 작성합니다.
git config alias.pushall '!git push origin devel && git push github devel'
명령어를 하면, 「 with with with with with 。git pushall
을 사용하다
언급URL : https://stackoverflow.com/questions/14290113/git-pushing-code-to-two-remotes
'bestsource' 카테고리의 다른 글
태그는 Git 브랜치와 어떻게 다릅니까?여기 어떤 걸 쓰면 좋을까요? (0) | 2023.04.19 |
---|---|
UIViewAlertForUnsatibleConstraints를 트랩하는 방법 (0) | 2023.04.19 |
단일 파일을 이전 버전으로 되돌리려면 어떻게 해야 합니까? (0) | 2023.04.19 |
libv8 설치 중 오류: 오류: gem 네이티브 확장을 빌드하지 못했습니다. (0) | 2023.04.19 |
PowerShell에서 경로를 정규화하는 방법 (0) | 2023.04.19 |