2016-10-26 5 views
4

나는 개발중인 복잡한 이온 프로젝트를 가지고있다. 현재 개발중인 많은 구성 요소와 공급 업체는 제네릭이며 다른 회사의 프로젝트에서 사용할 수 있습니다. 이것은 소프트웨어 개발에서 일반적입니다. 구성 요소 기능 지점에 밀려 테스트 베드에서 개발git 하위 트리를 사용할 때 어떻게 특정 폴더를 추가 할 수 있습니까?

my-company-library-repo ---- 
          |_ component 1 feature branch 
           |_ company component 1 feature branch testbed 
          |_ component 2 feature branch 

마지막 구성 요소 코드 (단지 .ts 또는 .js 파일) : 이것은 내가 가지고 올 한 망할 놈의 워크 플로우 (이 그래프는 지점을 표시)입니다. 테스트 베드 코드는 테스트 베드 브랜치에 있습니다. 또한 지형지 ​​물 지점에는 해당 구성 요소와 함께 제공 될 수있는 모든 문서가 표시됩니다. (이 그래프는 폴더 구조를 보여줍니다)

git subtree add -P <destination-dir/feature> --squash <my-company-library-repo-url> <feature-branch-name> 

그리고 나에게 다음을했다 :

이제 응용 프로그램의 repo 내가이 명령을 사용하여 하위 트리로 기능 분기를 추가

my-app-repo------- 
        |_ company-library-feature-subtree 

이를 .js 또는 .ts 만 포함하고 하위 폴더에는 문서가 있어야합니다. 나는 이것을 부분적인 방식으로 만 작동시킨다. 는 하위 트리를 가져옵니다 때, 그것은 단지 구성 요소를 끌어 않고는 문서 파일을하지만 파일은 다음과 같이 하위 디렉토리의 아주 긴 목록에 들어갔습니다 얻을 :이 수

my-app-repo/src/feature-branch/feature/src/app/providers/... 

열심히 라이브러리 인해를 사용하는 파일은 너무 많은 디렉토리 (사용하지 않는 디렉토리)에 배치됩니다.

그래서 feature-testbed 브랜치에서 feature 브랜치로 2 파일을 푸시 할 때 어떻게 그 전체 디렉토리 구조를 가져올 수 있습니까?

+0

게시물을 편집하여 질문에 대한 추가 정보를 추가하십시오. 주석을 읽기 어려우며 쉽게 삭제할 수 있으므로 주석에 추가하지 마십시오. 귀하의 질문에 귀하의 기존 의견에 대한 정보를 편집했습니다 (// stackoverflow.com/help/editing). –

+1

힘내에서 * push *라는 단어는 특별한 의미가 있습니다. 파일을 푸시하지 않고 커밋을 푸시하면 한 저장소에서 다른 저장소로 옮깁니다. 마찬가지로 * branch *에는 특수한 정의가 있으며 (불행히도 모호하다.) 어떤 저장소도 교차하지 않는다. * pull *은 fetch-then-merge *를 의미하고, * fetch * 및 * merge *는 특수 전문 용어입니다. 'git subtree '는 여러 저장소, 커밋, 브랜치를 의도적으로 섞어 한꺼번에 처리하기 때문에 복잡합니다. @ ScottWeldon의 편집 내용이 많은 도움이되었지만 아직도 혼란 스러울 것입니다. :-) – torek

답변

3

Scott Weldon의 솔루션을 조사했습니다. 그것은 작동하지만 git 서브 트리가 해당 디렉토리를 자체 repo로 분할합니다. 적어도 필자가 맨 페이지와 책을 읽었을 때 얻었던 것과 그렇지 않은 것. (내가 틀렸다면, 그럴 수도 있습니다. 제게 알려주십시오.) 그건 내가하고 싶지 않은 것이지.

그러나 나는 내 문제에 대한 해결책을 찾았습니다. 여기에 내가 망할 놈의 하위 트리 내 프로젝트에 (대신 GIT 하위 트리 명령의) 전략을 병합하여 무슨 짓을했는지 :

$ git remote add my-library <my-library-url> 
$ git fetch my-library 
$ git checkout -b my-library-branch my-library/master 
$ git checkout master 
$ git read-tree --prefix=<desired/library/dir> -u my-library-branch 
$ git commit -m "Merged library project as subdirectory" 
$ git push 

이 큰했다. 합리적인 하위 폴더에 내 라이브러리가 있습니다. 시피, 필자는 맞춤 구성 요소 또는 제공 업체와 같은 청크가 아닌 전체 라이브러리를 가져 가야하지만,이 경우에는 괜찮습니다.

3

my-app-repo에 하위 트리를 추가하기 전에 my-company-library-repo에서 하위 트리를 분할 :

# In my-company-library-repo 
git subtree split -P src/app/providers/... -b feature-new feature 

이는 feature 지점에서 시작하여 REPO의 루트에 src/app/providers/...의 내용에 새로운 역사를 만들고, 만들 것 이 역사의 끝에 지점 feature-new.

그런 다음 my-app-repo에 하위 트리로 그 새로운 지점을 추가
# In my-app-repo 
git subtree add -P <destination-dir/feature> --squash <my-company-library-repo> feature-new 

지금 당신이 <destination-dir/feature>src/app/providers/...의 내용이있을 것이다.

이 프로세스를 정기적으로 반복할지 여부는 언급하지 않았지만 가능합니다. git-subtree 사람이 페이지에서 : 정확히 같은 역사의

대한 반복 분할은 동일하게 보장된다 (즉, 동일한 ID를 위탁 생산.). 이 때문에 새로운 커밋을 추가 한 다음 다시 분할하면 지난번 생성 한 내역 위에 새 커밋이 커밋으로 첨부되므로 'git merge'과 친구들이 예상대로 작동합니다.