다른 지역 Git 브랜치를 Heroku / master에게 푸시하는 방법


402

헤 로쿠는 '마스터'를 제외한 모든 지점을 무시하는 정책을 가지고 있습니다.

Heroku의 디자이너는이 정책 (스토리지 및 성능 최적화를 추측하고 있습니다)에 대한 훌륭한 이유가 있다고 확신하지만 개발자로서의 결과는 로컬 토픽 브랜치가 무엇이든간에 쉬운 방법을 원한다는 것입니다. Heroku의 마스터를 해당 로컬 토픽 브랜치로 전환하고 "git push heroku -f"를 수행하여 Heroku의 마스터를 덮어 씁니다.

http://progit.org/book/ch9-5.html 의 "Pushing Refspecs"섹션에서 읽은 내용 은

git push -f heroku local-topic-branch : refs / heads / master

내가 정말로 원하는 것은 "git push heroku"가 항상 위의 작업을 수행하도록 local-topic-branch 를 현재 분기의 이름으로 바꾸도록 구성 파일에서 이것을 설정하는 방법 입니다. 누구든지 그것을 달성하는 방법을 알고 있다면 알려주십시오!

물론 이것에 대한주의 사항은 내가 Heroku 앱 / 저장소에 푸시 할 수있는 유일한 사람이라면 합리적이라는 것입니다. 테스트 또는 QA 팀은 이러한 저장소를 관리하여 다른 후보 분기를 시험해 볼 수 있지만 어느 날 어느 지점에 푸시할지에 대해 모두 일치하도록 조정해야합니다.

말할 것도없이, 모든 것을 백업하기위한 이러한 제한없이 별도의 원격 저장소 (GitHub와 같은)를 갖는 것이 좋습니다. "git push"는 항상 모든 것을 원점으로 백업하고 "git push heroku"는 현재 Heroku의 마스터 브랜치에있는 모든 지점을 푸시하여 덮어 씁니다. 필요하다면.

이게 효과가 있을까요?

[원격 "heroku"]
    url = git@heroku.com : my-app.git
    푸시 = + refs / heads / * : refs / heads / master

Heroku에서 더미 앱을 만들어 실험 해 볼 수는 있지만 실험을 시작하기 전에 더 경험이 많은 사람의 의견을 듣고 싶습니다.

가져 오기와 관련하여 Heroku 저장소가 쓰기 전용인지는 중요하지 않습니다. 모든 작업의 ​​백업 및 복제를 위해 GitHub와 같은 별도의 저장소가 여전히 있습니다.

각주 :이 질문은 Heroku와 지점 전략을 사용하는 Good Git 배포 와 유사하지만 그다지 동일하지 않습니까?


1
현재 가장 많이 투표 된 답변은이 작업을 수행하는 관용적 방법입니다 (그리고 이모는 실제 정답입니다)
Selali

: refspecs를 밀어에 대한 대안 HTTPS 자원 자식 SCM 문서를 refspecs를 밀어 대해 .
Dylan Landry

답변:


131

와일드 카드를 사용할 때는 참조 사양의 양쪽에 있어야하므로 +refs/heads/*:refs/heads/master작동하지 않습니다. 그러나 당신은 사용할 수 있습니다 +HEAD:refs/heads/master:

git config remote.heroku.push +HEAD:refs/heads/master

또한 git push로 직접이 작업을 수행 할 수 있습니다 .

git push heroku +HEAD:master
git push -f heroku HEAD:master

4
이 두 명령의 차이점 또는 두 가지를 모두 수행해야합니까
Saad Masood

2
@SaadMasood : 마지막 git push명령은 동일한 기능을 수행합니다. 옵션 git push --help의 의미와 참조 스펙 의 내용 을 참조하십시오 . -f+
Chris Johnsen

4
@Chris Johnson : 여기 사람들을 RTFMing하는 대신 -f 매개 변수가 무엇을 의미하는지 말씀해 주시겠습니까?
AHH

@AHH -f힘을 의미합니다 . 그것은 jassa의 대답으로 나를 위해 일했습니다 .
Mr. Tao

@Chris Johnson : HEAD는 전체 기록이 아닌 최신 버전의 앱만 푸시하는 데 사용됩니까?
카메론 윌비

1566

참조 https://devcenter.heroku.com/articles/git#deploying-code를

$ git push heroku yourbranch:master

24
-f 힘이 필요할 수 있습니다.
Scott Stafford

여전히 문서에 있음에도 불구하고 더 이상 작동하지 않는 것 같습니다. 강제로도 서버는 마스터 분기를 삭제할 수 없다는 푸시를 거부합니다.
Dave Meehan

3
@DaveMeehan 이것은 여전히 ​​작동합니다. git push :master마스터 브랜치를 아무것도 덮어 쓰지 않고 삭제 하려고합니다 . 다른 지점으로 덮어 쓰는 것과 다릅니다. Heroku는 아마도 마스터 브랜치 삭제를 막기위한 보호 장치를 갖추고있을 것입니다.
Dennis

이것은 훌륭한 솔루션입니다
Ajay Kumar

2
@nxmohamad 당신의 브랜치가 master 브랜치 뒤에 있고 Heroku의 현재 코드를 무시하고 싶지 않다면 그렇지 않습니다.
Ricks

64
git push -f heroku local_branch_name:master

3
이 용도를 조심 -f--force, 그리고 당신이 밀어 강제로 할 때 당신이 무슨 일을하는지 알 수 있도록하는 것이 가장 좋습니다.
MiFiHiBye

@ tomasz-mazur 왜 -f가 필요합니까?
nxmohamad

그래, 우리는 여러 진행 가지 작업 같은 경우에 -f 사용하고 어떤에게 Heroku에 교체하고 작업 지점을 시험 할 필요가있을 수있다, 제발 조언 경우에 우리가 시험에 다른 더 좋은 방법이 있나요
파하드

대답 덕분에 내 컴퓨터에서 작동하지만 실제로이 구문은 일반 Github 저장소에서 유효합니까?
Luk Aron

10

다른 로컬 Git 브랜치를 Heroku / master에게 푸시하는 가장 안전한 명령입니다.

git push -f heroku branch_name:master

참고 : -f를 사용하지 않고 푸시 할 수 있지만 다른 개발자의 푸시와 충돌을 피하기 위해 -f (강제 플래그)를 사용하는 것이 좋습니다.


1
먼저 -f없이 수행하는 것이 더 나은 방법이라고 생각하지 않습니까? 그렇다면 갈등이 있다면 먼저 그것을
써도

7

저에게는 효과가 있습니다.

git push -f heroku otherBranch:master

다른 개발자의 푸시와 충돌을 피하려면 -f (force 플래그)를 사용하는 것이 좋습니다. 개정 관리에 Git을 사용하지 않고 전송 전용이므로 force 플래그를 사용하는 것이 합리적입니다.

출처 :- 공식 문서


5

또한 git flow 시스템과 기능 분기를 사용하는 경우 호출 될 수 있습니다

feature/mobile_additions

그리고 stagingtwo라는 git remote를 사용하면 heroku로 푸시하는 명령은

git push stagingtwo feature/mobile_additions:master

4

heroku_san을 확인하면 이 문제를 아주 잘 해결할 수 있습니다.

예를 들어 다음을 수행 할 수 있습니다.

git checkout BRANCH
rake qa deploy

또한 새로운 Heroku 인스턴스를 스핀 업하여 토픽 브랜치를 새로운 서버에 배포 할 수 있습니다.

git checkout BRANCH
# edit config/heroku.yml with new app instance and shortname
rake shortname heroku:create deploy # auto creates deploys and migrates

물론 무언가를 자주하면 더 간단한 갈퀴 작업을 할 수 있습니다.




0

나는 그것이 있어야한다고 생각

push = refs/heads/*:refs/heads/*

대신에 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.