2010-02-12 6 views
5

필자는 저에게 일하는 저장소가 있습니다. 오픈 소스에 넣으려는 모든 자료를 넣을 수있는 폴더가 있습니다. 따라서 개인 부분과 별개입니다. 매번 새롭게 변경된 파일을 그곳에 올려야한다는 것을 기억하지 않고 gitub 저장소에 해당 폴더에 커밋 된 것을 자동으로 밀어 넣을 수있는 방법이 있습니까? 전체 저장소를 다른 github 위치로 푸시하고 싶습니다.자동 푸시를 git 저장소에있는 git 저장소의 한 폴더로 변경 하시겠습니까?

답변

8

파트가 공개되고 파트가 비공개가되는 단일 저장소가있는 경우 저장소 설정에서 근본적으로 변경해야합니다. git은 완전한 저장소를 추적하므로 저장소를 공개 또는 비공개로 설정할 수 있지만 부분적으로는 아니고 부분적으로는 할 수 없습니다.

"공개"파일이있는 repo와 "개인"파일이있는 repo가있는 경우 "공개"저장소에 git 후크를 추가하여 자동으로 커밋을 푸시하고 비공개 저장소를 비공개로 유지할 수 있습니다 .

그러나, 당신은 당신이 "공개"와 "개인"파일을 모두 포함하는 단일 REPO, 그래서 당신은 어떤 방법으로 개인 "공공"뭔가 뭔가 "에 그 분할 필요가 있다고 쓰고있다.

당신에게 이 상황을 해결하기 위해 여러 옵션이 있습니다. 당신이 GitHub의에 밀어 것 자체 저장소에 "공개"폴더 밖으로

  1. 분할이는 "공공"조금 폴더의 역사를 다시 쓰는 것입니다. 아래에서이 내용을 간략하게 설명합니다.

  2. "public"폴더에만 관련된 분기를 만들고 해당 분기 만 게시하십시오. "공개"파일과 "개인"파일을 모두 처리하는 커밋이있는 경우 "실수로 밀어 넣기, 즉 개인적인 콘텐츠 게시", 즉 의 위험성이 있습니다. 은이 옵션에 대해 조언하고 자세한 내용을 쓰지 않습니다.

    분할 떨어져 자신의 저장소에 "공개"폴더의 경우

, 당신의 "결합"분기하는 새로운 "공공"분기를 만들고, 새로운 "공개"지점은 물건을 포함하기 위해 그 위에 git filter-branch를 사용 "공개"폴더에서. "예제"절은 오른쪽 - 하위 디렉토리 - 필터 예제를 보여줍니다. 그런 다음 "공용"폴더와 비공개 항목이있는 기존의 "결합 된"분기와 "공용"폴더 만있는 새로운 "공용"분기를 갖게됩니다.

예 : 새로운 "공용"분기의 커밋 메시지에는 여전히 "개인"정보가 포함될 수 있습니다. 따라서 모든 커밋 메시지를 살펴보고 개인 정보를 스캔 한 다음 개인 정보 (예 : 개인 정보)를 수정해야합니다. git rebase -i.

업데이트 : [ "공용"지점 및 아무것도 아마 다른 정보를 전송하지 않으므로이 REPO 정리의 후속 푸시는 아마 필요하지 않습니다.] 당신이 작업을 수행하기 위해 필요한 경우 수정하면 git gc (아마도 --prune=0--aggressive 옵션이 포함 된 버전)을 사용하여 기존의 미정계 광고를 repo에서 삭제하려고합니다. 그러나 그에 대한 자세한 정보는 찾을 수 없습니다.

이제 "공개"지점을 게시 할 준비가되었습니다. "공개"정보 만 포함하고 있는지 확인하려면 새로운 빈 로컬 베어 레포로 푸시하고 그 내용을 검토하여 모든 참조 정보에 개인 정보가 없는지 확인하십시오. 만족 한 후에 "공개"지점을 github의 새로운 빈 저장소로 푸시 할 수 있습니다. github의 repo에는 github repo에서 "master"라는 이름을 지정해야하는 "public"지점 만 포함됩니다.

"결합 된"지점이있는 귀하의 지역 저장소에는 여전히 공개 및 개인 정보가 모두 포함되어 있으며 새로운 "공개"github 저장소에 연결되어 있지 않습니다.

이제 바로 비공개 비트를 포함하는 "결합"지점의 역사를 다시 작성,하지만 지금, 역사의 모든 중 "공개"와 "개인"파일의 상태 사이의 모든 연결을 희생 반복되는 오래된 재료의 빌드는 불가능에 가깝게 될 것입니다. 따라서 "결합 된"브랜치의 히스토리 만 남겨두고 새 커밋에서 "공용"폴더를 제거하는 것이 좋습니다.

개인 파일과 공용 파일의 통합이 매우 엄격하고 버전에 따라 다르면 github의 "공개"저장소의 특정 버전을 개인용 저장소에 추가 할 수 있습니다 (git submodule). 이전의 "공용"폴더와 같은 이름의 새 하위 모듈 폴더는 개인 파일에 대한 변경을 최소화합니다. 그러면 모든 공용 파일이 이전 경로에있게됩니다. 하위 모듈 폴더는 무언가가 github에 푸시 될 때 자동으로 업데이트되지 않습니다. "결합 된"저장소의 하위 모듈 정보를 업데이트하는 로컬 서브 모듈 폴더에 자식 훅을 추가하여이 문제를 해결할 수 있습니다.

개인 파일과 공용 파일 간의 통합이 느슨한 경우 외부 타사 프로젝트와 같은 공개 파일을 처리하고 다른 사람들과 통합하는 방식으로 개인 파일에 통합 할 수 있습니다. 귀하의 "개인"소프트웨어가 의존하는 소프트웨어의 외부 부분.

+0

예, 공개 자료와 비공개 자료의 긴밀한 통합은 왜 내가 한 가지 레포에 보관하고 싶은지입니다. 대중적인 것들은 내가 그것을 사용하는 사적인 일을 할 때 주로 바뀌기 때문에 당기고 싶지 않습니다. 또한 개인 repo의 상태에 태그를 추가하고 현재 공개 된 버전의 공개 항목을 포함 할 수 있기를 원합니다. – uliwitness

+0

자식 서브 모듈은 하위 모듈 커밋의 SHA를 기록합니다. 개인 repo에 태그를 지정하면 해당 태그에는 모든 하위 모듈의 커밋 SHA가 포함됩니다. 따라서 원하는 단단 결합을 얻을 수 있습니다. – ndim

0

githook을 사용하여 커밋을 푸시합니다.

+0

전체 저장소를 푸시하지 않겠습니까? 거기에서 그 폴더와 그 내용을 어떻게 추출 할 수 있습니까? – uliwitness

+0

서브 모듈 폴더, 포스트 후크 푸시 – databyte

관련 문제