2013-04-10 2 views
1

웹 응용 프로그램을 배포하려면 http://danbarber.me/using-git-for-deployment/과 같은 git 기반 배포 절차를 구현하려고합니다. 당신은, 당신은에서 끌어있는 "허브" git deployment : 병합되지 않은 작업 트리 파일이 덮어 씁니다.

  • 웹 서버 공용 디렉토리에있는 정상의 repo를 밀어하는

    • 베어의 repo : 는 기본적으로 라이브 서버에 두의 repos 구성 "바퀴통". 허브에 적절한 업데이트 후크가있는 경우이 작업이 자동으로 수행됩니다.

    문제는 내 프로젝트에서 웹 서버의 개발 및 실제 라이브 데이터에 샘플 데이터가 들어있는/upload/같은 많은 디렉토리가 있다는 것입니다.

    이상적으로 로컬 저장소에 업로드/폴더를 보관하고 싶지만 라이브 저장소에서 가져 오지 않는 것이 좋습니다. 이제 "부분적인"당김이 가능하지 않습니까?

    따라서, 최적의 솔루션 (I 지역의 repos 샘플 데이터를 복제 할 수 없습니다), 내가 그 폴더를 무시하려고하지만 아니에요 경우에도 :

    • 나는에 업로드/폴더를 추가했다. 로컬 및 라이브 repos에 gitignore. 비 추적 작업을 :
    • 나는
    • 내가 오류가 나는 허브에서 끌어 라이브의 repo에 베어 "허브"의 repo
    • 에 프로젝트를 밀어/
    • 업로드 --cached 자식 RM으로 제거 트리 파일을 병합 덮어 것 ...이 글을 쓰는 동안 /이 실제로

    업로드/폴더 어딘가에 여전히 나에게 보인다 ... 가, 내가 볼 XXX 업로드하는 허브에서 복제의 폴더 업로드/너무 복제되었습니다!

    몇 가지 질문에서 본 것처럼 모든 프로젝트 기록에서 폴더를 완전히 제거하는 유일한 해결책은 무엇입니까?

    다른 모든 동료가 다른 지사에서 일하는 것을 지저분한 리베이스로 강제 할 예정입니까?

    이 모든 것을 설명하고 이해하는 것은 어렵지만 어떤 생각이든 환영합니다.

  • +0

    'git rm --cached'는 index에서 파일을 제거하기 만합니다. 이것은 다음에 커밋 될 내용을 의미합니다. 실제로 파일을 제거하지 않으며 다음 커밋에서 제거를 표시하지도 않습니다. 'git add upload/*'(커미트되지 않은)를했다면 무언가를 할 것입니다. 그렇지 않으면 아무것도하지 않습니다. – Shahbaz

    답변

    2

    분기의 헤드보다 오래된 커밋을 체크 아웃하지 않으려는 경우이를 모두 수행 할 필요는 없습니다.

    당신이해야 할 일은 새로운 커밋에서 upload/*을 제거하는 것입니다. 그런 다음 새로운 커밋을 보는 사람은 upload 디렉토리를 볼 수 없습니다.

    물론, 당신은 그것에서 당길만한 복제에 은 "허브"에 upload/* 파일을 백업 커밋에 업로드를 제거하고 그 자리에 다시 백업을 데려 가고 싶다는 것입니다. 이제 데이터가 디렉토리에 존재하지만 자식은 더 이상 추적하지 않을 것입니다.

    참고 : 백업하지 않으면, 당신은 확인하여, 그들이 추적되지 않는 경우 또는 자식하여 (오류를 당기는 사람 (이전 커밋을 체크 아웃하여 복구) 허브의 upload/* 데이터를 삭제하거나 복구 할 것 추적되면 오래된 커밋).그럼에도 불구하고, 먼저 백업하는 것이 좋습니다.


    예 :

    $ git init 
    $ mkdir upload 
    $ echo 'upload/*' > .gitignore 
    $ touch to_track upload/not_track 
    $ git add .gitignore to_track upload/not_track 
    $ git commit 
    

    는 이제 저장소에 upload/not_track 있습니다.
    $ cp upload/not_track ../backup 
    $ git rm upload/not_track 
    $ git commit 
    $ mv ../backup/not_track upload/ 
    

    지금 현재 디렉토리에있는 파일을 변경하지 않은,하지만 upload/not_track 더 이상 (이에서 앞으로 커밋) 저장소에 있지 않습니다.

    +0

    와우, 좋은 통찰력, 쉽고 명확한 해결책! 나는 그것에 대해 생각하지 않았다. 고마워요! – Glasnhost

    +0

    @Glasnhost, 문제 없음 :) – Shahbaz

    0

    git repo를 보지 않고서는 어려울 지 모르지만, 당신이 설명하는 것이 일어나서는 안됩니다.

    폴더에 숨김 파일 (예 : .gitignore file 또는 .DS_Store (Mac 폴더 브라우저 캐시) 또는 이와 유사한 파일)이 있는지 확인 했습니까? 무시 된 파일은 git rm에 의해 자동으로 제거되지 않습니다.

    git rm 전에 무시했거나 무시해야 할 경우 무시하십시오. 즉, rm입니다.

    관련 문제