programing

여러 원격 위치에서 풀/푸시하려면 어떻게 해야 합니까?

muds 2023. 5. 16. 23:13
반응형

여러 원격 위치에서 풀/푸시하려면 어떻게 해야 합니까?

간단히 말해, 단일 "출처"가 아닌 원격 저장소 목록에서 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 pushuser2@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"
  1. 첫 번째 URL에서 복제:
git clone git@github.com:myuser/myrepo.git
  1. 현재 리모컨 검토:
$ git remote -v
origin  git@github.com:myuser/myrepo.git (fetch)
origin  git@github.com:myuser/myrepo.git (push)
  1. 다음에 대한 두 번째 리모컨 추가origin:
git remote set-url --add origin git@bitbucket.org:myuser/myrepo.git
  1. 두 원격이 모두 다음에 대해 나열되는지 확인합니다.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
  1. 모든 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 모든 원격에 푸시할 것이라고 가정할 경우 별칭이 지정됩니다. (예: 포크가 있습니다.sshagGitHub과 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

반응형