문제

설정하려면 어떻게 해야 하는 자식 프로젝트를 포함한 다른 프로젝트?

예를 들어.나는 일에 온라인 매핑 응용 프로그램입니다.우리는 개발 GPS 도구를 함께 옷을에서는 SF.우리는 동시에 개발 Python Geomapping 스크립트와 함께 다른 우려를(그에 대한 관심 geomapping).우리 자신의 코어 파일이 단 두고,구축을 위한 응용 프로그램은 우리가 필요합니다.

각 프로젝트의 존재해야 합니다 자체에 의해-사람에 관심이 있는 GPS 전용에 관심을 가지고 GPS-그러나""부모 프로젝트를 포함하는 모든 다른 사람에 액세스할 수 있어야로 프로젝트입니다.

나는 몇 시간을 보냈을 이해하려고 노력 하위 모듈지만,그들은 너무 많은 독립을 위해 필요한 것입니다.

또한,가능한 경우,그것은 좋은 것입하는 경우 이러한 각 프로젝트가 포함될 수 있습 중 하나 또는 두 개의 겹치는 스크립트가 있습니다.할 수 없습 중 하나는 자식 프로젝트 파일을 포함하지 않는 부분의'root'그래서 그 때 이 파일에 의해 업데이트되나 팀 모두 혜택을 받을 수 있습니까?

이 할 수 있으로 Git?와 Mercurial?는 호스트(GitHub,Gitorious)이 문제인가?

내가 사용하는 아이디어 전복을 위해'부모'-을 무시하고.git 폴더 Git 을 사용하여 프로젝트(는 무시됩니다.svn 폴더)-그러나 그만의 마지막 리조트입니다.

편집:

는 이유를 설명하는 내가 원하지 않는 하위 모듈:

  1. 사용자는 다운로드,지퍼를 포함하지 않 서브 모듈( & ).전과 같을 때에도 공동 작업자도를 설정 프로젝트입니다.이것은 보여 마개를 비치하고 있습니다.
  2. 서브 모듈은 냉동하지 않습(쉽게)을 선택 최신 버전의 프로젝트는 지적했습니다.
  3. 기타 이유로 지적에서 환상적인 답변이 아래에서 이 독백에 NoPugs.

하위트리에는 병합(저에 소개된 폴,아래)하지 않을 것이다:그것은 어려운 업데이트 소[의 하위트리에서 프로젝트에서 그것으로 병합되고,그 원본이 있어야 합니다 외부의'root'폴더의 프로젝트입니다.웹 응용 프로그램,그것은 생명 있는 모든 내 페이지의 링크에 내부적으로 폴더내에,그리고 테스트하고 업데이트 수행 내에서 직접하는 폴더에 있습니다.(희망이 명확하고 유용한 다른 사람.)

여전히 공부하고 설정하는'원격 분기'하지만 다른 아이디어가 여전히 환영합니다.

도움이 되었습니까?

해결책

내가 찾지 못 하위 모듈을에 특히 유용(작은)프로젝트 일했다.일단 당신이 그들을 설정 작업에서 전체 프로젝트에 필요한 추가적인 매개변수를 거의 모든 명령을 구문 없이 완전히 정기적입니다.내가 상상하는 경우에는 대규모 프로젝트로 더 하위 모듈,내가 그것을 참조로 더 도움이 단점.

두 가지 가능성을 유지하는 sub-독립적인 프로젝트 git repos 는 당신에 풀에서 당신의 주요(통합)repo:

  • 하위트리에 병합 을 가지고 외부 프로젝트로 별도의 하위 디렉토리 에서 당신의 주요 repo 포함하는 코어 파일이 있습니다.이것은 쉽게 업데이트 메인 프로젝트에서 외부 프로젝트,하지만 복잡하게 보낼 변경 내용을 외부 프로젝트입니다.나는 생각으로는 좋은 방법을 포함해 프로젝트 종속,그러나 그것은 작동하지 않을 것이라서 공유된 파일이 있습니다. 다른 간단한 설명(링크를 수정).

  • 각각 설정 프로젝트를 원격으로점 에서 당신의 주요 repo 및 병합의 각각에서 그들을 master (통합)점을 포함하는 코어 파일이 있습니다.이렇게 하려면 몇 가지 분야:만약 당신이 모든 변경 사항을 외부 프로젝트에서 당신의 주요 repo,그들은 해야 합니다 만든 지점에서와 그 병합으로 마스터;고 당신은 결코 병합하려는 프로젝트에 가지입니다.이것은 쉽게 보낼 변경 내용을 외부 프로젝트가 완벽하게 사용을 허용하기 지점에서 사용할 수 있습니다..

    공유 스크립트가 처리할 수 있으로 또 다른 독립적 지점에서 본 디렉토리는 외부할 수 있는 파트너에서 당기고 밀어로 원격니다.

을 실행하려고 하면 SVN&Git 은 동일한 디렉터리에서,당신은 매우 어렵를 사용하여 분기에 하나는 시스템이기 때문에,SVN 는 분기에 파일을 복사하여 디렉토리에 있는 동안 Git 트랙 포인터입니다.어느 시스템은 자동으로 표시 지점을 만들 수 있습니다.내가 생각하는'솔루션'이보다 더 문제가가 가치가있다.

다른 팁

나는 GIT를 사용하여 내 자신의 GitHub 호스팅 프로젝트와 내가 사용하고 싶은 외부 UI 라이브러리를 함께 꿰매었다. 라이브러리는 Sourceforge의 전복 저장소에서 호스팅됩니다.

나는 git-submodule과 git-svn을 사용했고 합리적으로 잘 작동했습니다. 단점은 다음과 같습니다.

  1. 라이브러리 저장소를 최신 상태로 유지하기 위해 서브 모듈 Git Hash "포인터"를 업데이트하기 위해 새로운 커밋을 수행해야했습니다. SVN : 외부와 달리 GIT 서브 모듈이 특정 커밋 ID에 고정되기 때문입니다. 실제로 안정적인 버전을 고정하려면 실제 단점이 아닐 수도 있습니다. WIP 인 코드로 작업하고있었습니다.

  2. 서브 모듈이있는 git repo의 초기 풀에는 "git submodule init"가있는 추가 단계가 필요합니다. 이것은 귀하에게는 문제가되지 않지만 코드를 사용하는 다른 사람들에게는 코드를 컴파일/실행/테스트하기 전에이 단계를 기억하거나 수행해야합니다.

  3. 명령 줄을 사용하는 경우 git-add로 저장소를 조이기 쉽습니다. 이것은 당신이 입력하기 때문입니다 git add subm<tab> 완료합니다 git add submodule, 그러나 자동 완성됩니다 git add submodule/ - 후행 슬래시를 기록하십시오. 후행 슬래시로 명령을 실행하면 하위 모듈이 블리팅되고 대신 포함 된 모든 파일을 추가합니다. 이것은 git-gui를 사용하여 완화됩니다. git add . 또는 단지 슬래시를 삭제하도록 스스로 훈련합니다 (나는 그것을 제거하도록 훈련시킬 정도로 충분히 나에게 일어났습니다).

  4. 서브 모듈 커밋은 git rebase -i를 엉망으로 만들 수 있습니다. 정확한 세부 사항을 잊어 버렸지 만 "더러운"하위 모듈이 있고 Rebase-Interactive를 실행하는 경우 특히 나쁩니다. 일반적으로 더러운 나무를 사용하면 다시 비제 할 수 없지만 서브 모듈은 확인되지 않습니다. Rebase 그룹에 여러 개의 하위 모듈 커밋이 있으면 문제가 발생합니다. 마지막 하위 모듈 해시는 목록에서 첫 번째 선택에 최선을 다하고 있으며 나중에 수정하기가 매우 까다 롭습니다. 이것은보다 신중한 워크 플로 (즉, 서브 모드 커밋을 수행 할시기를 신중하게 결정하는 것)와 함께 일할 수 있지만 피타가 될 수 있습니다.

이것을 설정하는 단계는 다음과 같은 선을 따라 무언가였습니다.

  1. 운영 git svn clone https://project.svn.sourceforge.net/svnroot/project/project/trunk
  2. 예를 들어 Github에게 "실제"git 프로젝트로 밀어 넣으십시오.
  3. 이제 자신의 git 저장소에서 실행하십시오 git submodule init
  4. git submodule add git://github.com/project subproject
  5. 이번에는 자신의 저장소로도 밀어 넣으십시오.

그게 다소 그 이상입니다. 새로운 디렉토리 "하위 프로 주자"가 있으며,이 경우에는 Geomapping 라이브러리가 될 것입니다.

Geomapping 코드를 업데이트 할 때마다 다음과 같은 것을 실행합니다.

cd subproject
git svn rebase
git svn push  # this updates the git mirror of the subproject
cd ..
git add subproject # careful with the trailing slash!
git commit -m "update subproject"
git push # this pushes the commit that updates the subproject

나는 GIT 하위 모듈 작업 흐름에 대한 많은 튜토리얼을 보지 못했기 때문에 이것이 당신이 결정하는 데 도움이되기를 바랍니다.

git-submodule은 당신이 찾고있는 것일 수 있습니다.

http://book.git-scm.com/5_submodules.html

http://git-scm.org/gitwiki/gitsubmoduletutorial

내가 읽은 작은 것에서 외관, 그것은 svn 'externals'의 포트 인 것으로 보입니다.

이는 최신 버전으로 자동으로 업데이트를 포함하여 GIT 하위 모듈의 일부 문제를 해결합니다.

SVN 외부 또는이 프로젝트에 대한 경험은 없지만 다른 사람들보다 더 나은 솔루션이 될 수 있습니다.

또는 다음 소프트웨어 (Github와 함께 사용할 수있는 것처럼 보입니다). 일부 사람들이 고양이를 피부에 넣는 또 다른 방법 일 수 있습니다.드리다 (소프트 페디아 페이지)

작업중 인 프로젝트의 종류와 SCM과 상호 작용 해야하는 도구에 따라 다릅니다. 예를 들어, Rails는 종종 Capistrano를 사용하여 배치하고 Capistrano는 리포지토리의 루트와 관련하여 디렉토리 구조의 모습에 대해 특정 가정을합니다. 이 경우 여러 개의 상호 관련 Rails 앱이있는 경우 하위 모듈을 사용해야합니다. 각 앱은 자체 리포지토리를 얻은 다음 각 독립 리포지토리를 하위 모듈로 관리하는 더 큰 저장소가 있습니다.

이런 종류의 가정을 만드는 도구가 없더라도 좋은 저장소 디자인은 언젠가 더 큰 프로젝트의 하위 섹션을 독립적으로 사용하거나 재사용 할 가능성이 거의 없다면 약간의 물건을 분해해야합니다. 일부 독립 프로젝트 내에서 일부 큰 코드.

버전 기록을 유지하면서 자체 개별 엔티티로 리포지토리의 일부 하위 섹션을 추출하는 것은 GIT에서는 어렵 기 때문에 미리 계획하는 것이 좋습니다.

당신의 구체적인 질문에 관해서는, 솔직히 말해서, 나는 몇 개의 서브 모듈이 이상적인 곳의 완벽한 예라고 부릅니다. 스크립트 공유와 관련하여 실제로 어떤 이유로 든 실제로 문제가되는 문제 인 경우 항상 Symlink를 사용할 수 있습니다.

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