2016-07-22 9 views
2

서로 다른 리모컨이 있습니다. push 구성; 예 :설정이 다른 여러 자식 저장소에 푸시하는 방법은 무엇입니까?

[remote "public"] 
    url = ssh://external-server/repo 
    push = refs/heads/master:refs/heads/master 

[remote "internal"] 
    url = ssh://internal-server/repo 
    push = refs/heads/*:refs/heads/* 

레이어를 추가로 발명하지 않고도 단일 명령으로 두 저장소에 모두 푸시 할 수 있습니까?

관련 질문에서 제안한대로 pushUrl을 시도했지만이 경우 URL이 필요하고 리모컨을 허용하지 않습니다. 그럼,에

[remote "all"] 
    pushUrl = "ext::git push public" 
    pushUrl = "ext::git push internal" 

같은 git-remote-ext를 사용하도록 수정하지만이 첫 번째 저장소에 밀어 때문에 현실에서

fatal: Could not read from remote repository. 

수동 쉘 명령 (git push public && git push internal)입니다하지 않는 솔루션에 실패 I 원격 저장소 (예 : 고객, 공공 저장소, 내부/외부 미러, 테스트 시스템, 읽기 전용 소스가 호스팅하는 자식 서버)가 많은 저장소가 있습니다. 때때로 그들은 내가 (물건을 밀어 git push 사용) 별명이 작동하지만 너무 어색하고 어떻게 든 일반적인 워크 플로우를 중단 할 수 정의

git submodule foreach 'git push all' 

같은 방법으로 밀어 원하는 서브 모듈에 있습니다.

답변

1

관련 질문은 "Git - Pushing code to two remotes"이어야하며 푸시 URL이 인 원격 'all'이 필요합니다.

ext::git push public은 (는) URL이 아닙니다. ssh://external-server/repo입니다. 업스트림 지점을 누르면됩니다이 만 가지를 업스트림 기본 푸시 정책을 설정하면

git remote rm all 
git remote add all ssh://internal-server/repo 
git remote set-url --add --push all ssh://internal-server/repo 
git remote set-url --add --push all ssh://external-server/repo 

은 기본적으로는 refs/heads/*:refs/heads/*

refspec 푸시를 사용합니다.

git config push.default simple 

~

+0

가 어떻게 여기에 다른'push'의 설정을 지정합니까? 예 : 나는 내부 서버의 모든 브랜치를 원하지만 외부의 마스터는 오직 마스터 만 원한다. – ensc

+0

@ensc 확실하지 않습니다. push.policy (편집 된 답변)와 함께 갈 것이지만, 당신은 그것을 테스트하고 어떤 브랜치가 푸시되는지를 알아야한다. (실제 내부 및 외부 리모트가 아니라 더미 리모트를 사용한다.) – VonC

+0

hacky. ...'-next' 브랜치를 내부 저장소 ('push = + refs/heads/next : refs/heads/next'')에 강제로 밀어 넣는 것을 어떻게 표현하겠습니까? – ensc