2010-11-28 3 views
6

최근 SVN에서 Git으로 변환 된 특정 사이트 개발 환경에서 워크 플로를 수행하는 방법을 계획하는 데 도움이 필요합니다.Git 웹 개발 워크 플로우 : 긴급 수정 사항 및 여러 주요 일정 게시하기 저글링

나는 클라이언트 서버에 라이브 및 스테이징 사이트 4 개가 있으며 개발자의 repos 중 2 개에 "허브"(베어 레포)를 호스팅하는 dev 서버가 있습니다. 알려지지 않은 순서로 여러 개발자가 작업하면서 변경해야 할 몇 가지 마일스톤이 있습니다. 또한 라이브 사이트에는 즉시 수행되는 수많은 빠른 수정이 필요합니다.

내 주요 질문은 다음과 같습니다

긴급 수정 사항이 어떻게 변화의 이정표를 게시해야
  • 내 뇌가 알아 내려고 루프에서 이동하기 시작 이동 해결 방법

    • 최고의 워크 플로우. 이 게시물의 참고 자료로, 모바일과 재 설계라는 두 가지 획기적인 변화가 있다고 가정 해 봅시다. 여기까지 지금까지 무엇을 생각해 냈습니다 :

      각 개발자 repo, hub repo 및 stage repo에는 mobile, redesign, master 분기가 있습니다. 라이브 저장소에는 하나의 분기가 있습니다.

      빠른 수정 : 개발자가 마스터 분기를 변경하고 허브로 푸시합니다. 그런 다음 실시간으로 허브에서 변경 사항을 가져옵니다 (또는 미리 테스트해야하는 경우 먼저 스테이지를 준비합니다).

      최종 단계 및 게시 "재 설계"마일스톤 : 개발자가 지점을 허브로 다시 디자인하고 단계에서 변경 사항을 가져옵니다. 클라이언트 테스트 및 승인. 허브에서 개발자는 마스터로 재 설계를 병합합니다 (그리고 내가 생각하기에 태그를 생성합니다). 그런 다음 마스터를 라이브로 가져옵니다. 또는 개발자가 자신의 복사본에있는 지점을 병합 한 다음 마스터를 허브에 밀어 넣는 것이 더 낫습니다. 또한 태그가 생성 된 경우 마스터 브랜치를 당기지 않고 라이브 (가능한 경우) 태그를 가져 오는 것이 좋습니다. 태그는 허브 repo에만 있어야합니까?

    답변

    2

    "병합"부분을 제외하고는 워크 플로가 소리처럼 보입니다.

    먼저 항상 리베이스를 병합하기 전에 개발자가 마스터 브랜치 맨 위에 작업을 리베이스하여 ("rebase vs. merge"에 설명 된 첫 번째 시나리오와 같이) 로컬 충돌을 해결합니다.
    그러면 초기 리베이스 이후의 병합을 빨리 감기 할 수 있습니다.

    (Jefromi는 REBASE이 항상 가능하지는 않습니다 코멘트에서 언급하고있다.
    사실, 몇 가지 작업이 이미 추진 될 때마다/같은 일이 위험하다 리베이스, 다른 곳에서 가져온.) 태그를 당기에 관해서는

    또는 라이브에서 마스터라면, 나는 꼬리표가 HEAD이 아니라 배치 된 태그만을 가지고있을 것입니다. 의미 살아있는 상태에서 베어 레포를 푸시합니다. post-receive 후크는 master 브랜치의 HEAD에있는 경우에만 태그가있는 비 베어 레포 (실제 라이브 사이트)를 업데이트하도록 설정됩니다 (git describe 수 있음). 쉽게 확인)

    +0

    물론, 항상 핫픽스로 리베이스 할 수있는 것은 아닙니다. 유지 관리 분기와 현재 버전을 병합 할 수 있습니다. 개발자는 여전히 로컬에서 병합을 수행하여 공용 repo에서 빨리 감기 병합을 수행하도록 할 수 있습니다. – Cascabel

    +0

    위대한, rebasing 및 언제 그것을 할 수 있는지에 대해 깊이 설명해 주셔서 감사합니다. 후크에 관해서, 내가 마스터에 태그를 만들 때마다 태그가 자동으로 태그를 붙일 것이라고 말하는 것입니까? 내가 제대로 이해하는지 모르겠다. – spadeworkers

    +0

    @spadeworkers : 푸시 된 커밋이 레이블인지 발견 할 수있는 스크립트가 있어야합니다 (즉, 'git describe'가 들어있는 곳). 그런 커밋 (즉 태그가있는 커밋) 인 경우 해당 태그는 베어되지 않은 저장소로 푸시되고 비 베어 저장소는 해당 태그로 체크 아웃됩니다 (동일한'post-receive' 훅 스크립트로) 알 겠어. – VonC

    1

    제 생각에는 워크 플로가 75 %입니다. 여기 내가 어떻게 할 것입니까 :

    기본 개념은 각 지점이 웹 사이트의 상태를 나타내는 것입니다.마스터 브랜치는 현재 진행중인 작업이며, 기본적으로 준비 사이트에서 볼 수 있습니다. 실제 라이브 사이트를 나타내는 '라이브'지점을 만듭니다. 그런 다음 다른 작업에 필요한 지점을 여러 개 보유합니다.

    개발자는 변경 사항을 분기가있는 허브 저장소로 푸시합니다. 기능을 사용할 준비가되면 변경 사항을 마스터 분기에 병합/리베이스하고 허브에 푸시합니다. 그런 다음 이러한 변경 사항을 준비 사이트에 동기화 (푸시 또는 풀)합니다. 변경 사항에 만족할 때까지이 작업을 수행하십시오. (개발 PC에서) 마스터 분기에서 라이브 분기를 리베이스합니다. 허브에 밀어 넣은 다음 라이브 서버로 동기화 (밀어 넣기/당기기)하면 웹 사이트가 업데이트됩니다.

    여기서 중요한 점은 라이브 사이트에 대해 별도의 지점이 있다는 것입니다. 이를 통해 개발자는 라이브 지점을 가져 와서 사이트를 빠르게 변경할 수 있습니다.

    마지막으로 로컬 개발자 분기를 제외하고는 모든 저장소가 모든 저장소에 복제됩니다. 이를 통해 모든 사람들이 서로 다른 작업 단계를 볼 수 있습니다.

    +0

    감사합니다. , 이것은 일을 아주 분명하게 만든다. 나는이 모델을 우리의 워크 플로우에 사용하는 것을 상상할 수있다. 그리고 태그는 내 dev pc에있는 master에서 리베이스 한 후에 생성 될 것입니다. 태그는 허브 및 다른 곳으로 푸시 한 후에도 복제됩니다. 그게 맞습니까? – spadeworkers

    +0

    예, 맞습니다. – rioki

    관련 문제