2012-10-05 3 views
2

master 브랜치가 프로덕션 코드를 나타내는 웹 사이트에 대한 git 리포지토리가 있습니다. 사이트의 '샌드 박스'버전을 설정하라는 요청을 받았으며 시스템의 잠재 사용자가 실험을 통해 프로덕션 시스템에서이를 수행 할 필요가 없습니다.git : 리베이스 된 브랜치를 정기적으로 푸시하는 것보다 나은 대안

사이트의 샌드 박스 버전에 명확하게 레이블을 지정하고 일부 기능을 사용하지 않도록 설정해야하므로 샌드 박스 분기 (마스터를 기반으로)를 만들고 경고 메시지를 추가하는 등 일부 커밋을 수행했습니다.

그런 다음 두 분기를 모두 업스트림으로 밀어 넣었습니다. 그리고 웹 서버에서 프로덕션 용과 샌드 박스 용으로 별도의 디렉토리에서 각 분기를 체크 아웃했습니다.

잘 작동하지만 더 많은 코드를 작성하려고 할 때 문제가 발생합니다. 마스터 브랜치에 코드를 커밋하면 프로덕션 시스템에서 업데이트되지만 샌드 박스에서는 새 코드가 표시되지 않습니다. 따라서 샌드 박스 분기를 마스터에 리베이스하므로 샌드 박스에 대한 커밋이 항상 프로덕션 상단에 있습니다. 그러나 일단 내가 한 후에는 더 이상 빨리 감기가 아니기 때문에 더 이상 샌드 박스 분기를 업스트림으로 푸시 할 수 없습니다. 나는 자식 서버에 로그인하고 분기를 바꾸고 소프트 리셋을 한 다음 푸시를 다시해야한다.

분명히 git을 사용하여 더 나은 방법이 있습니까? 필자가 실제로 필요로하는 것은 현재 어떤 분기가 현재 체크 아웃되어 있는지에 따라 커밋을 일관되게 적용하는 몇 가지 방법입니다.

+0

커밋 후크를 시도 했습니까? –

+0

@ J-16SDiZ : 아니오, git에 내장 된 기능으로이 작업을 수행 할 수 있기를 바랬으므로 저장소가 이동하는 경우 후크를 복사하는 것을 기억할 필요가 없습니다. – Malvineous

+0

샌드 박스 서버에 후크가 있음을 의미합니다. 이미 몇 가지 CI 인프라가 없습니까? 샌드 박스는 어떻게 업데이트됩니까? –

답변

1

git push remote +branch으로 고속 되감기를 수행 할 수 있습니다. 그러나 수신 자식 저장소는이를 거부하도록 구성 할 수 있습니다.

그러나 이전 버전의 분기를 편집했지만 리베이스 된 버전을 업스트림으로 밀어 넣으면 약간의 문제가 발생할 수 있습니다. 이 문제를 해결하는 한 가지 방법은 다음과 같습니다.

# you are on branch X and origin/X has been force-updated 
git branch X-tmp # keep a reference to your new commits 
git fetch origin 
git reset --hard origin/X # now X is the same as origin/X 

# now you have two options 
# option 1: move the new commits from X-tmp to X by cherry-picking 
# them one-by-one 
git cherry-pick abc123 
git cherry-pick def456 

# option 2: this rebase should do the right thing and detect the equivalent 
# commits in X and X-tmp 
git checkout X-tmp 
git rebase X 
+0

이것은 나쁜 생각이 아닙니다. 작업 트리에 넣을 수 없기 때문에 (또는해서는 안되기 때문에) 대상 작업 트리에서'git pull '을 수행하는 스크립트가 있습니다.그래서이 트리는 절약 할 필요가있는 추가 커밋을 결코 가지지 않기 때문에 이것을'git reset && git pull' 형태로 변경할 수 있습니다. – Malvineous

1

두 가지 코드 경로 (master 브랜치에 둘 다 필요함)가 있으면 다르게 수행합니다.

예 : 일부 구성 파일 (버전 제어하에 있지 않음)을 사용하면 다른 코드 경로로 전환 할 수 있습니다. 또는 어떤 환경 변수 - 당신에게 가장 적합한 모든 것.

+0

사실, 이것은 dev/prod 버전 (예 : dev 버전은 실제 사용자를 전자 메일로 보내지 않습니다.)에 대해 수행 한 작업입니다. 샌드 박스는 일시적인 것이므로 샌드 박스 코드를 유지하지 않을 수 있기를 바랍니다. 완료되면 해당 분기를 삭제하면됩니다. – Malvineous

관련 문제