여러 원격 위치에서 풀/푸시하려면 어떻게 해야 합니까?
간단히 말해, 단일 "출처"가 아닌 원격 저장소 목록에서 Git repo를 푸시하고 풀 수 있는 방법이 있습니까?
긴 이야기: 여러 대의 컴퓨터에서 다양한 연결을 가진 앱을 개발할 때 종종 문제가 발생합니다. 예를 들어, 운송 중인 노트북, 특정 위치에 있는 컴퓨터 "A", 다른 위치에 있는 컴퓨터 "B" 등입니다.또한, 노트북은 "A" 또는 "B"와만 연결될 수 있으며, 때로는 둘 다 연결될 수도 있습니다.
항상 현재 연결할 수 있는 모든 컴퓨터에서 "풀"하고 "푸시"하도록 하여 한 컴퓨터에서 다른 컴퓨터로 이동하여 원활하게 작업을 계속할 수 있습니다.
수동으로 이 작업을 수행할 필요가 없습니다. 최신 버전의git
아래의 말비뉴의 해결책을 참조하십시오.
여기서 재현:
git remote set-url origin --push --add <a remote>
git remote set-url origin --push --add <another remote>
원답:
이것은 제가 꽤 오랫동안 나쁜 결과 없이 사용해 왔고 Git 메일링 리스트에서 Linus Torvalds에 의해 제안되었습니다.
Arqnid의 솔루션은 저장소에 코드를 가져올 수 있는 적절한 솔루션입니다. 하지만 저처럼 여러 개의 동등한 권한을 가진 업스트림(개인 업스트림, GitHub 및 Codaset에 중요한 프로젝트 중 일부를 복제하여 보관함)이 있을 경우 매일 각 프로젝트에 변경 사항을 적용하는 것이 번거로울 수 있습니다.
단히말해서간,서해말,git remote add
를 개별적으로그에 모든리모개로사용수할있습다니으별을적컨▁all있다수니습▁then.git config -e
병합된 원격을 추가합니다.이 리포지토리를 가지고 있다고 가정합니다.config
:
[remote "GitHub"]
url = git@github.com:elliottcable/Paws.o.git
fetch = +refs/heads/*:refs/remotes/GitHub/*
[branch "Master"]
remote = GitHub
merge = refs/heads/Master
[remote "Codaset"]
url = git@codaset.com:elliottcable/paws-o.git
fetch = +refs/heads/*:refs/remotes/Codaset/*
[remote "Paws"]
url = git@github.com:Paws/Paws.o.git
fetch = +refs/heads/*:refs/remotes/Paws/*
병된리 만‐다니듭을에 대해 합니다."Paws"
그리고."Codaset"
다음을 모두 추가할 수 있습니다.
[remote "Origin"]
url = git@github.com:Paws/Paws.o.git
url = git@codaset.com:elliottcable/paws-o.git
이거 하고 제가 ▁i, 가▁once내.git push Origin Master
그것은 둘 다에게 밀어줄 것입니다.Paws/Master
그리고.Codaset/Master
순차적으로, 삶을 조금 더 쉽게 만듭니다.
를 사용하여 원격 할 수 .git remote
명령:
git remote add alt alt-machine:/path/to/repo
된 모든 및 분기에서 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "HEAD
수행:
git remote update
현재 원격 중 하나에 연결되어 있지 않으면 시간이 걸리거나 오류가 발생한 후 다음으로 이동합니다. 가온리수병동합합야니다해로으서에리토.cherry-pick
변경사항 수집을 구성하는 방법에 따라 다릅니다.
alt에서 마스터 브랜치를 가져와 현재 헤드로 가져오려면 다음을 수행합니다.
git pull alt master
그래서 사실은git pull
는 거의 입니다말임줄의다▁almost▁is▁shorth니and입▁for.git pull origin HEAD
(구성 파일에서 이를 확인할 수 있지만 이해할 수 있습니다.)
업데이트를 푸시하려면 각 repo에 수동으로 업데이트를 적용해야 합니다.
푸시는 중앙 저장소 워크플로우를 염두에 두고 설계되었습니다.
git 1.8(2012년 10월) 이후 명령줄에서 이 작업을 수행할 수 있습니다.
git remote set-url origin --push --add user1@repo1
git remote set-url origin --push --add user2@repo2
git remote -v
그리고나서git push
user2@repo2.us er1@repo1로 푸시됩니다. user2@repo2로 푸시됩니다.
~/.bashrc에 다음 별칭을 추가했습니다.
alias pushall='for i in `git remote`; do git push $i; done;'
alias pullall='for i in `git remote`; do git pull $i; done;'
다음을 사용하여 원격을 추가할 수 있습니다.
git remote add a urla
git remote add b urlb
그런 다음 모든 리포지토리를 업데이트하려면 다음을 수행합니다.
git remote update
은 "" "bash" "bash" 내부에 bash 입니다..gitconfig
섹션
[alias]
pushall = "!f(){ for i in `git remote`; do git push $i; done; };f"
- 첫 번째 URL에서 복제:
git clone git@github.com:myuser/myrepo.git
- 현재 리모컨 검토:
$ git remote -v
origin git@github.com:myuser/myrepo.git (fetch)
origin git@github.com:myuser/myrepo.git (push)
- 다음에 대한 두 번째 리모컨 추가
origin
:
git remote set-url --add origin git@bitbucket.org:myuser/myrepo.git
- 두 원격이 모두 다음에 대해 나열되는지 확인합니다.
push
:
$ git remote -v
origin git@github.com:myuser/myrepo.git (fetch)
origin git@github.com:myuser/myrepo.git (push)
origin git@bitbucket.org:myuser/myrepo.git (push)
$ git config --local --get-regexp ^remote\..+\.url$
remote.origin.url git@github.com:myuser/myrepo.git
remote.origin.url git@bitbucket.org:myuser/myrepo.git
- 모든 URL을 순서대로 푸시:
git push
원격 삭제하기
git remote set-url --delete origin git@bitbucket.org:myuser/myrepo.git
2023년 업데이트
여러 개의 원격을 동시에 푸시하려는 경우 Git을 충분히 인식할 수 있습니다.원격 저장소를 원격 저장소라고 합니다.원격에 변경 사항을 적용하는 것은 일반적인 개발 주기의 일부입니다.
때때로 GitHub, 비트 버킷 등과 같은 여러 원격에 변경 사항을 푸시해야 할 수도 있습니다.이렇게 하려면 지정된 지침을 따를 수 있습니다.
기존 원격 목록 표시
다음 명령을 사용하여 사용 가능한 모든 원격을 나열할 수 있습니다.
git remote -v
(다른) 원격이 아직 구성되어 있지 않다고 가정합니다.Git 리모컨을 사용하여 이 작업을 수행할 수 있습니다.
git remote add remote_name remote_url
예:
git remote add github https//github.com/path/to/repo
일반적으로 원격 이름을 기본 오리진으로 지정하여 변경 사항을 푸시합니다.git push origin
그룹 원격을 여러 개 구성하고 이름을 지정할 수 있습니다.그래서 그 이름을 참조하여 모든 원격지에 푸시합니다.
git remote or git config 명령을 사용하거나 구성 파일을 편집하여 여러 원격을 추가할 수 있습니다.
Git는 여러 원격을 그룹화할 수 있으므로 다음 방법 중 하나를 사용하여 여러 원격을 동시에 푸시하도록 구성할 수 있습니다(모두 필요 없음).
git remote를 사용하여 원격 추가
git remote를 사용하여 여러 원격 URL을 단일 원격으로 설정할 수 있습니다.
이라는 이름의 리모컨이 'all'을 사용하여 .git remote add
그런 다음 사용합니다.git remote set-url --add
새 URL을 기존 원격에 추가합니다.
git remote add all <remote URL>
그리고나서
git remote set-url --add all <another remote URL>
된 새 은 다을사추새원교수확있다습니를 사용하여 교차 할 수 .git remote -v
.
(또는)
git 구성을 사용하여 여러 원격 그룹화
그git config
명령은 git 매개 변수를 구성하는 데 사용됩니다.은 다편다니합집을 입니다..git/config
파일을 지정된 입력으로 지정합니다.
git config --add remote.all.url https//domain.com/repo.git
git config --add remote.all.url ssh://user@host/repos/repo.git
없는 노트--add
은 기존 합니다. 은 option 명은을원기 URL다에서 할 수 . 업데이트된 구성을 확인할 수 있습니다..git/config
.
(또는)
.git/config
구성 형식을 알고 있는 경우 원격 및 여러 원격 URL을 추가합니다.
이제 여러 원격 URL이 할당된 원격 이름을 참조하여 여러 원격을 동시에 푸시할 수 있습니다.
git push all master
공식 bash 구문을 사용하여 그룹화하지 않고 항상 여러 원격 저장소로 푸시할 수 있습니다.
git push server master && git push github master
파일의 에 두 했습니다.git config 파일의 원격 "origin"에 두 개의 개별 pushurl을 추가했습니다.가 행할때실을 할 때.git push origin "branchName"
그런 다음 각 URL로 이동하여 푸시합니다.이것을 달성하는 더 쉬운 방법이 있을지 모르겠지만 이것은 Github 소스 코드와 My.visualStudio 소스 코드를 동시에 푸시할 수 있습니다.
[remote "origin"]
url = "Main Repo URL"
fetch = +refs/heads/*:refs/remotes/origin/*
pushurl = "repo1 URL"
pushurl = "reop2 URl"
VSO/TFS에서 작업한 다음 준비가 되면 GitHub에 공개적으로 푸시하고 싶었습니다.개인 VSO에 초기 레포가 생성되었습니다.GitHub에 추가할 때가 되었을 때 저는 다음을 수행했습니다.
git remote add mygithubrepo https://github.com/jhealy/kinect2.git
git push -f mygithubrepo master
챔피언처럼 일을...
건전성 검사를 위해 "git remote-v"를 발행하여 프로젝트와 연결된 리포지토리를 나열합니다.
C:\dev\kinect\vso-repo-k2work\FaceNSkinWPF>git remote -v
githubrepo https://github.com/jhealy/kinect2.git (fetch)
githubrepo https://github.com/jhealy/kinect2.git (push)
origin https://devfish.visualstudio.com/DefaultCollection/_git/Kinect2Work (fetch)
origin https://devfish.visualstudio.com/DefaultCollection/_git/Kinect2Work (push)
간단한 방법으로, 나를 위해 일했습니다.이것이 누군가에게 도움이 되기를 바랍니다.
저는 자유롭게 nona-urbiz에서 답변을 확장했습니다. 이것을 ~/.bashrc에 추가하십시오.
git-pullall () { for RMT in $(git remote); do git pull -v $RMT $1; done; }
alias git-pullall=git-pullall
git-pushall () { for RMT in $(git remote); do git push -v $RMT $1; done; }
alias git-pushall=git-pushall
용도:
git-pullall master
git-pushall master ## or
git-pushall
git-pullall에 대한 분기 인수를 제공하지 않으면 기본값이 아닌 원격에서 끌어오기가 실패합니다. git과 유사하기 때문에 이 동작은 그대로 둡니다.
즉, 격업즉트이데원즉(,,pull
사례), 일이 쉬워졌습니다.
라이너스의 성명
슬프게도, 기트 가명으로 이것을 속일 방법조차 없습니다.
엘리엇 케이블의 Git 메일링 리스트에서 언급된 항목은 더 이상 사실이 아닙니다.
git fetch
을 배웠습니다.--all
모든 원격을 한 번에 가져올 수 있는 매개 변수입니다.
요청하지 에는 모요청하경다사수있다습니용할음을우않을 할 수 있습니다.--multiple
스위치를 눌러 여러 원격 또는 그룹을 지정합니다.
그것들을 반복하려면 스크립트가 필요할 것입니다.Git은 "모두 밀어내기"를 제공하지 않습니다.이론적으로 여러 스레드에서 푸시를 수행할 수 있지만 기본 메서드는 사용할 수 없습니다.
Fetch는 훨씬 더 복잡하며 선형적으로 하는 것이 좋습니다.
제 생각에 여러분의 최선의 대답은 모든 사람이 밀거나 당기는 기계를 한 번 만드는 것입니다. 가능하다면 말이죠.
아래 명령을 사용하여 글로벌 gitconfig(/home/user/.gitconfig)에 별칭을 추가합니다.
git config --global alias.pushall '!f(){ for var in $(git remote show); do echo "pushing to $var"; git push $var; done; }; f'
일단 코드를 커밋하면, 우리는 말합니다.
기트 푸쉬
기본적으로 오리진으로 푸시합니다.위의 가명 뒤에, 우리는 다음과 같이 말할 수 있습니다.
git pushall
코드는 오리진 원격을 포함한 모든 원격으로 업데이트됩니다.
추가all
리모트는 당신이 사용하는 각 기계에서 설정해야 하기 때문에 약간 지루합니다.
고또리그.bash
그리고.git
모든 원격에 푸시할 것이라고 가정할 경우 별칭이 지정됩니다. (예: 포크가 있습니다.sshag
GitHub과 GitLab에서 관리합니다.업스트림 리모컨을 추가했지만 푸시 권한이 없습니다.)
여기 있습니다.git
다음을 포함하는 푸시 URL을 사용하여 원격으로만 푸시하는 별칭@
.
psall = "!f() { \
for R in $(git remote -v | awk '/@.*push/ { print $1 }'); do \
git push $R $1; \
done \
}; f"
최근 버전의 Git에서는 지정된 원격에 대해 여러 개의 푸시울을 추가할 수 있습니다.다음을 사용하여 오리진에 두 개의 푸시울을 추가합니다.
git remote set-url --add --push origin git://original/repo.git
git remote set-url --add --push origin git://another/repo.git
따라서 오리진으로 푸시하면 두 저장소로 푸시됩니다.
업데이트 1: Git 1.8.0.1 및 1.8.1(및 다른 버전)에 버그가 있어 처음 사용할 때 --add로 원래 URL을 바꾸므로 동일한 명령을 사용하여 원래 URL을 다시 추가해야 합니다.git remote -v를 수행하면 각 원격의 현재 URL이 표시됩니다.
업데이트 2: Junio C.Git 유지 관리자인 Hamano는 그것이 어떻게 설계되었는지 설명했습니다.git remote set-url --add --push <remote_name>을 수행하면 지정된 원격에 대한 pushurl이 추가되며, 이는 push의 기본 URL을 재정의합니다.그러나 지정된 리모컨에 대해 여러 개의 푸시울을 추가할 수 있으며, 이를 통해 한 번의 깃 푸시를 사용하여 여러 개의 원격으로 푸시할 수 있습니다.아래에서 이 동작을 확인할 수 있습니다.
$ 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/*
이제 단일 명령을 사용하여 둘 이상의 리포지토리에 푸시하려는 경우, (@Adam Nelson이 주석에서 제안한 대로) 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
그런 다음 다른 리포지토리를 가리키며 pushurl을 all remote에 추가합니다.
$ 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
Here git remote -v는 푸시를 위한 새 푸시 URL을 표시하므로, git push all 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
우리가 추가한 두 개의 푸쉬울이 모두 유지되는 것을 볼 수 있습니다.이제 한 번의 git push all master는 git://another/repo.git 및 git://original/repo.git 모두에 마스터 분기를 푸시합니다.
중요 참고: 리모컨에 푸시를 승인/거부할 수 있는 고유한 규칙(훅)이 있는 경우, 한 리모컨은 푸시를 수락하는 반면 다른 리모컨은 수락하지 않을 수 있습니다.따라서, 만약 당신이 그들이 정확히 같은 기록을 가지길 원한다면, 당신은 당신의 커밋을 로컬에서 수정하여 그것들을 양쪽 리모트에서 모두 수용할 수 있게 하고 다시 밀어넣기를 해야 할 것입니다. 그렇지 않으면 당신은 단지 기록을 다시 써서 고칠 수 있는 상황에 처하게 될 것입니다. (푸시-f를 사용하여.그리고 그것은 이미 당신의 이전 변경 사항을 레포에서 끌어낸 사람들에게 문제를 일으킬 수 있습니다.
새 원격 추가 중
git remote add upstream https://github.com/example-org/example-repo.git
git remote -vv
여러 위치에서 가져오기
git fetch --all
위치로 푸시
git push -u upstream/dev
언급URL : https://stackoverflow.com/questions/849308/how-can-i-pull-push-from-multiple-remote-locations
'programing' 카테고리의 다른 글
Bash의 변수에 출력 할당 (0) | 2023.05.16 |
---|---|
가져오기 오류: 'yaml'이라는 이름의 모듈이 없습니다. (0) | 2023.05.16 |
Python 목록에서 인접한 항목 쌍을 통해 반복 (0) | 2023.05.16 |
비어 있지 않은 디렉터리 제거 (0) | 2023.05.16 |
MVVM Light Toolkit 샘플 (0) | 2023.05.16 |