2013-02-08 4 views
0

자바 스크립트를 사용하여 개발하는 동안 우리는 서버에 축소 된 JS를 업로드하므로 내 로컬 브랜치 (사설) 브랜치를 변경하는 동안 마이너 JS 만 마스터 브랜치에 보관하려고합니다. . 로컬 브랜치에서 마스터로 축소 된 JS 만 병합하는 간단한 방법이 있습니까?하나의 브랜치에서 선택적인 파일을 다른 브랜치에 추가하기

내 개인 커밋에서 모든 파일을 병합하고 싶지 않기 때문에 커밋 선택이 작동하지 않습니다. This method는 다른 지점에서 커밋 할 하나의 지점에서 특정 파일을 선택하는 것이 좋습니다, 즉 설정/다른 방법이 자동화 즉, 병합 만 축소 된 js 파일 (* .min.js) 소요됩니다 궁금 해서요?

+0

'master'에 비공개 또는 축소 된 코드가 모두있는 것이 왜 문제가됩니까? 당신이 거의 이익을 위해 일을 복잡하게하려는 것처럼 들리는 것 같습니다. (서버에 사용되지 않는 작은 파일들이 많이있는 것을 피하십시오.) – millimoose

+0

또한 소스 컨트롤보다 더 나은 해결책이 있습니다. 애플리케이션 코드에서 JS 주문형을 축소하거나 배포 중에 실행되는 도구 (예 : [grunt'] (http://gruntjs.com/))를 사용하여 구현할 수 있습니다. – millimoose

+0

@millimoose 왜냐하면 master 브랜치가 unimified code를 노출하고 싶지 않은 클라이언트와 공유하기 때문입니다. – Ani

답변

1

문서 루트에 원격 repo 이있는 것처럼 들리 겠지만 라이브 사이트의 배포 메커니즘으로이를 사용하고 있습니다. 문서 루트에서 git repo를 사용하면 배포하기 좋은 방법이 아니라고 말할 수 있습니다. (누구나 전체 커밋 기록과 잠재적으로 난처한 코드를 포함하여 전체 레포를 복제 할 수 있습니다.) 아마 다르게 설정했을 수도 있지만, 내가 작성한 것에 근거하여이 가정을 할 것입니다.

대신 수신 후 수신 후크를 사용하여 master을 문서 루트에 추출하지만 자식 레포가 다른 곳에있는 경우 두려움없이 축소 및 비 축소 JS 소스를 저장할 수 있습니다.

준비 서버의 문서 루트에서 git repo를 이동하십시오. 스테이징 웹 서버에 .git/hooks/post-receive에서

:

#!/bin/sh 
GIT_WORK_TREE=/path/to/your/docroot git archive master --format tar | tar -x "*.min.js" 

이 사용자가 선택한 디렉토리에 master 분기의 깨끗한 사본을 내보낼 git의 원인이됩니다. tar을 통해 파이핑을하면됩니다.이 파일을 통해 외출하려는 파일과 그렇지 않은 파일을 정확하게 필터링 할 수 있습니다. post-receive은 쉘 스크립트이므로 배포 후에 원하는 정리 작업을 수행 할 수 있도록 후속 라인을 추가하여 실제로 여기에 쉽게 이동할 수 있습니다.

그래서 위의 내용을 권하고 싶습니다. 여전히 마스터 브랜치에있는 파일의 서브 세트 만 보존하려는 경우 쉘 스크립트에 링크 된 메소드를 사용할 수 있습니다.

해당 지역의 지점 이름 local입니다 가정하고, (당신이 원하는 경우 .gitignore에 추가) 이미 최선을 다하고 있습니다 master에 '배포'싶은 모든는 deploy.sh합니다

#!/bin/sh 
git checkout master 
git diff-tree --name-only -r local | grep ".min.js$" > temp_file_list.txt 
git checkout local `sed 'N;s/\n/ /' temp_file_list.txt` 
git commit -m "Selective 'merge' of minified js from my local branch" 

그럼 그냥 변경된 .min.js 파일을 사용하여 마스터를 업데이트 할 때마다 deploy.sh을 실행하십시오. Windows를 사용하고 로컬 파일을 DOS 형식으로 유지하려면 위의 sed 명령에 \n 대신 \r\n을 넣고 bash 기반 명령 줄 도구를 설치해야합니다.

+0

No는 라이브 사이트로 사용되는 원격 Repo를 사용하지 않습니다.필자의 요구 사항은 특정 파일 만 공유하는 반면 나머지는 로컬 리포지토리에서 비공개로 유지하는 것입니다. 두 번째 방법이 효과가있을 것 같습니다. 월요일에 그것을 시도하고 다시, 감사합니다! – Ani

관련 문제