GIt Workflow 개발 및 생산 - 리포지토리를 어디에서 생성해야 합니까?

StackOverflow https://stackoverflow.com//questions/9672485

  •  12-12-2019
  •  | 
  •  

문제

어디선가* 다음과 같은 설정이 좋을 것이라는 글을 읽었습니다.

두 개의 주요 분기(각 서버당 하나씩).

마스터로 푸시하면 변경 사항이 라이브로 전송됩니다.

개발/스테이지(또는 무엇이라고 부르든)로 푸시하면 변경 사항이 스테이징으로 전송됩니다.

작업 흐름:

  • 개발에서 브랜치를 생성합니다.

  • 테스트 준비가 될 때까지 로컬에서 작업하세요.

  • 개발자에게 다시 병합;

  • 개발/스테이징 서버에 변경 사항을 보내는 허브로 푸시합니다.

라이브 방송 준비가 완료되면 다음 단계를 따르세요.

  • 개발자에서 마스터로 병합,

  • 그런 다음 마스터를 허브로 푸시하면 해당 변경 사항이 라이브 서버로 전송됩니다.

두 개의 주요 분기(각 서버당 하나씩).

그래서 나는 "Webroot/MyLiveApp/"에 "Production"과 "Webroot/devapp/"에 "개발"에 하나의 지점을 가지고 있습니다.

저장소는 어디에 있어야 합니까?

업데이트:

내 말은:

이 흐름에 따르면 다음과 같습니다.

  • 프라임 레포;

  • 베어 레포 허브;

  • 클론;

개발 및 생산 분기는 하나의 저장소에 속해야 합니다. 그렇죠?

이것이 맞다면 FIRST git init 명령을 실행해야 합니까?프라임 레포에서?

그래서 우리는 다음을 갖게 될 것입니다:

"webroot/myliveapp/" - 프로덕션 브랜치;

"webroot/devapp/" - 개발 브랜치;

"webroot/.git" - 프라임 저장소;

이게 말이 돼 ?

아니면 Prime 저장소가 프로덕션 지점 위치와 일치해야 합니까?

*메모:내가 구현하려는 작업 흐름에 대한 컨텍스트가 필요한 경우 다음을 참조하세요.http://joemaller.com/990/a-web-focused-git-workflow/

도움이 되었습니까?

해결책

귀하의 질문에 대한 업데이트에 감사드립니다. 이제 더 명확해졌습니다.

나는 당신이 겪고 있는 문제가 Git 워크플로우에 대한 오해에 기초하고 있다고 생각합니다.힘내 동일하지 않습니다 디렉토리 가지와 동일합니다. 파일 시스템 보기 가지에.이것은 강력하지만 발에 총을 쏘기가 쉽습니다.설명하겠습니다.

Git은 그 자체로 데이터베이스 지원, 차등 버전, 기록 추적 파일 시스템처럼 작동합니다.그것은 파일 시스템의 "일부"가 아니라 파일 시스템 "위"에 있습니다.브랜치를 나타내기 위해 파일 시스템을 사용하는 것이 아니라 다른 브랜치를 체크아웃할 때 사용합니다. 파일 시스템의 모든 파일은 해당 분기의 파일로 변경됩니다..Git에게 파일 시스템이 해당 브랜치의 대체 현실을 나타내도록 요청하고 있습니다.

지점에 있는 경우 master, 이며, 파일이 있습니다 root/foo.txt 커밋하고 브랜치를 체크아웃합니다. experiment, 이는 ~ 아니다 가지다 root/foo.txt 커밋하면 해당 파일을 찾을 수 있습니다 다 쓴 당신이 그것을 찾을 때.그것은의 일부입니다 master, 아니다 experiment, 이므로 파일 시스템에 존재하지 않습니다.이것이 Git이 브랜치를 전환하기 전에 커밋되는 현재 브랜치를 까다롭게 선택하는 이유입니다. Git이 알지 못하는 파일 시스템의 미단계 변경 사항이 있는 경우 Git은 이를 다른 현실로 덮어써서 날려버리는 것을 거부합니다.먼저 일을 바로잡기 위해 개입해야 합니다.

따라서 질문에 대답하려면 "myliveapp" 및 "devapp"에 대한 하위 디렉터리를 만들지 마세요. 가지."webroot" 아래에 하나의 코드베이스만 있으면 됩니다.그런 다음 "불안정한" 브랜치를 해킹하여 평소대로 변경 사항을 커밋합니다.그런 다음 "devapp" 분기로 전환하여 저장소의 모든 파일을 개발자 서버의 파일 버전으로 전환할 수 있으며 마찬가지로 언제든지 "불안정"으로 다시 전환할 수 있습니다.

브랜치를 업데이트하려는 경우.개발 서버를 업데이트하면 다음을 수행할 수 있습니다. merge "불안정"을 "devapp"으로 변경합니다.이렇게 하면 "devapp"의 모든 파일이 "unstable"의 파일처럼 보이게 되어 최신 상태가 됩니다.

주목해야 할 또 다른 사항:프라임 저장소, 베어 저장소, 클론의 차이는 거의 없습니다.소프트웨어에는 사실상 차이가 없습니다.오히려 "Linus의 커널은 정식 Linux 커널이다"라고 말하는 것이 인간의 관례입니다.그 이해를 바탕으로:

  • 프라임 저장소는 모두가 동의하는 소프트웨어의 "표준" 버전을 보유하고 있는 하나의 저장소입니다.즉, 개발자가 "내 버전의 DevApp 버전"이라는 말보다는 모든 사람들이보고 싶어하는 변화를 만들 때마다 "나는 우리의 주요 레포에 나의 변경 사항을 게시했습니다."라고 말할 수 있습니다. 사람들이 집회 할 수있는 쉬운 컨벤션입니다.
  • 클론은 다른 저장소의 복사본입니다.주요 저장소를 복제하고 변경한 다음 내 저장소를 복제할 수 있습니다.변경한 경우 병합이 유효하고 컴퓨터에 대한 권한이 있는 한 해당 내용을 프라임 저장소나 내 저장소에 푸시할 수 있습니다.
  • 베어 저장소에는 단순히 "작업 복사본"이 없습니다. 해당 컴퓨터에는 "webroot" 디렉터리가 없습니다.그것은 비어 있습니다 오직 그만큼 .git 디렉토리 - 누구도 파일을 변경할 필요가 없는 서버에 적합합니다.

마지막으로, .git dir은 저장소의 파일을 보관하지 않고 git 구성과 데이터베이스를 보관합니다.이는 데이터베이스 형식의 전체 저장소 기록으로, 특정 버전의 소프트웨어로 저장소의 나머지 부분을 채우는 데 사용됩니다.그래서 제가 댓글을 달았습니다:당신은 할 수 장소 상에서 확인해 보세요 모든 대체 현실의 모든 버전 네트워크 통신 없이 언제든지 저장소의 모든 정보가 .git 디렉토리에 있기 때문입니다.필요한 유일한 네트워크 통신은 다음을 원할 때입니다. 동조 다음을 사용하여 로컬 저장소를 다른 저장소로 push 또는 pull.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top