bestsource

Git - 코드를 두 개의 리모컨으로 푸시

bestsource 2023. 4. 19. 23:20
반응형

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>를 추가합니다.pushurlpush 기본 URL을 덮어씁니다.단, 여러 개를 추가할 수 있습니다.pushurl1개의 리모트에 대해서, 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

반응형