>

간단한 이야기는 여러 서버 (예 : QA, Prod)에 사이트가 설치되어 있다는 것입니다. Git은 모든 환경에 대해 다른 브랜치/태그로 설정되어 있으며, 모든 환경에 일반적인 배포 스크립트를 사용하여 작업을 단순화합니다. 스크립트가 원하는 분기/태그를 가져온 후 다음 명령을 실행하십시오.

GIT_CHECKOUT="${1:-develop}"
git clean --force --quiet
git fetch --all
git pull --all
git checkout $GIT_CHECKOUT

우리는 몇 가지 문제가 있습니다 :

  • 우리는 브랜치와 태그를 모두 지원하기 위해 git pull 를 모두 사용합니다.  그리고 git fetch  그리고 git pull  분리 된 헤드 모드에서는 작동하지 않지만 작동하지만 로그에 관련없는 오류가 발생합니다.
  • 때때로 더러운 환경으로 인해 체크 아웃이 실패하는 경우가 있습니다 (보통 환경에서 파일을 수동으로 변경 한 사람이 없기 때문에 처음에 원인을 알지 못함)

Jenkins가하는 방식을 살펴보면 다음과 같습니다.

> git fetch --tags --progress https://myrepo.com/repo.git +refs/heads/*:refs/remotes/origin/*
 > git rev-parse origin/mytag^{commit}
 > git rev-parse mytag^{commit}
 > git config core.sparsecheckout
 > git checkout -f hash-of-commit
 > git rev-list --no-walk hash-of-commit

마지막으로 질문 :

  • 배치 할 때 분리형 헤드 모드에서만 작업해야합니까? 보다 안정적인 솔루션처럼 들립니다.

  • 해당 과제에 대한 "레시피"가 있습니까? 매우 일반적인 작업이며, 그럼에도 불구하고 자신의 bash 스크립트로 온라인 레시피를 찾을 수 없습니다


  • 답변 # 1

    '분리 된 HEAD'에서는 pull을 시도 할 때 오류가 발생합니다. pull은 업스트림 분기를 사용하여 병합하기 때문입니다. 분리 된 HEAD 인 경우 업스트림 분기가 없습니다. git fetch 하기  로컬의 원격 정보를 업데이트하기에 충분해야합니다. 당신이 정말로 체크 아웃하고 싶어하고 더러운 환경이 있는지 여부를 걱정하고 싶지 않다면 gir reset --hard 를 시도 할 수 있습니다  대신

    이것은 내가 할 것입니다 :

    git clean --force --quiet
    git fetch --all
    git checkout --detach # disconnect from whatever branch I was working on
    git reset --hard $GIT_CHECKOUT
    
    

    유일한 것은 로컬로 아무 것도 움직이지 않는 것입니다 (예를 들어, 로컬 브랜치는 원격 브랜치와 함께 움직이지 않습니다).

    GIT_CHECKOUT="${1:-develop}"
    # cleanup *every* untracked file and dir
    git clean --force -d -x --quiet
    # undo every change to untracked files - might disturb update
    git reset --hard HEAD
    # now the working tree should be *pristine*
    # update all tracking branches and tags
    git fetch --all --tags
    git checkout --detach
    # delete any local branch
    git for-each-ref --format="%(refname:strip=2)" refs/heads |xargs -r git branch -D
    # checkout
    git checkout $GIT_CHECKOUT
    
    

  • 이전 php - 안드로이드 웹뷰에서 웹 사이트 세션을 유지하는 방법
  • 다음 charts - 누적 막대 그래프 내부에 높은 차트로 텍스트를 표시하는 방법