2013-08-20 3 views
1

두 저장소 (양방향)를 동기화 할 때 내용이 고려되지 않는 공용 폴더를 가지려면 연결된 두 개의 (분기 된) 저장소가 필요합니다. 우발적 인 덮어 쓰기/병합/추가를 방지하기 위해 동기화 할 때 수동 개입이 필요없는 방식으로.힘내 : 각 폴더마다 특정 폴더의 내용이 다른 포크 (병합으로 간주되지 않음)

자세한 내용은 :

는 (공개) A (민간) 및 포크 F를 리포지토리 고려하십시오. 각 저장소에는 /myprecious 폴더가 있습니다.

리포지토리 A에는 myprecious 폴더에 많은 파일이 포함되어 있으며 작업이 활발히 이루어져 리포지토리의 일부가되어야합니다. 포크 F에서 동일한 폴더에는 일반적으로 수정되지 않는 파일 (자리 표시 자)의 하위 집합 만 포함됩니다.

포크 F에서 끌어 오기 요청을 받으면 myprecious 폴더는 그대로두고 추가, 삭제 또는 수정하지 않아야합니다. 마찬가지로 A의 변경 사항을 포크 파일로 가져 오는 경우 myprecious 폴더의 변경 사항 및 추가 사항을 수신해서는 안되며 무시해야합니다.

Repo A에 하위 모듈을 통해 (예 : 폴더의 내용을 자체 저장소로 이동), 을 포함시키는 것이 가능한지, 포크 F의 하위 모듈 링크를 제거하면서 다른 하위 모듈이 아닌 내용으로 교체 할 수 있습니까? 병합 충돌없이 작동합니까? 아니면 이것을 설정하는 더 좋은 방법이 있습니까?

+0

당신의 설명에서, 그것은 당신이 찾고있는 서브 모듈이라고 들립니다. –

+0

나는 이것을 과장 할 수 있습니다. 아마도 공용 repo F에서 시작하여 해당 포크에서 private repo A를 사용하면 myprecious 폴더의 변경 사항이 끌어 오기 요청에 포함되지 않도록해야합니다. 흠 ... – LearnCocos2D

+0

이것이 가능한 해결책 인 것 같습니다. http://stackoverflow.com/questions/6138076/git-assume-unchanged-vs-skip-worktree (나는 .gitignore가 모든 폴더에 추가 될 수 있다는 것을 몰랐습니다. , 뿌리뿐만 아니라) – LearnCocos2D

답변

1

당신의 설명에서, 그것은 당신이 찾고있는 서브 모듈이라고 들립니다. 몇 가지 추가 단계가 필요합니다. 포크 할 때 init 서브 모듈을 만들고 최신 커밋 된 파일을 가져와야합니다. 아마도 두 개의 브랜치를 푸시 (push) 할 필요가있을 수 있습니다. 따라서 포크를 돌린 사람은 누구나 서브 모듈과 추가 로컬 브랜치에서 변경 사항을 얻을 수 있습니다.

추가 자세한 내용은 :

그래서 이것은 어떻게 작동하는지입니다 :

  • 가 자식의 repo myprecious을 만듭니다.
  • Repo A에서 myprecious 하위 모듈을 추가하십시오.
  • myprecious 디렉토리에서 스텁 파일을 추가하고 해당 변경 사항을 서브 모듈에 적용하십시오.
  • myprecious 디렉토리를 떠나면 서브 모듈에 대한 변경 사항이 표시됩니다.
  • 변경 사항을 A.에서 커밋으로 추가하고 전 세계와 공유하십시오. 이제

때 누군가 포크의 repo A, 그들이 경우 :

git submodule init 
git submodule update 

그들은 서브 모듈이 스텁 파일로 업데이트받을 것입니다. 지역 변경 이제

:

  • 당신은 당신이 그들을 저지 및 REPO 서브 모듈로 다시 밀어 수
  • 서브 모듈 내에서 리포 A의 변경하면.
  • 그러나 Repo A에서 변경된 하위 모듈을 커밋하지 않는 한, repo A를 포크하는 사용자는 변경 사항을 가져 오지 않습니다.

대체하지 않을 경우 서브 모듈 :

A/myprecious에서 수행 지역 변경을 추적 할 수없는 경우/최선을 다하고, 당신은 사용하여 볼 수 있었다 :

git update-index --assume-unchanged <files> 

참조 : http://blog.pagebakers.nl/2009/01/29/git-ignoring-changes-in-tracked-files/

+0

미묘한 변화 *는 * 추적되어야하고 Repo A에 맡겨야하지만 공용 repo F로 전송되지는 않습니다. – LearnCocos2D

+0

그렇다면 서브 모듈이 필요한 것을 할 수 있다고 생각합니다. –

+0

아 ... 알았어. 하위 모듈은 자동으로 동기화되지 않으며 링크 된 하위 모듈은 개인 저장소이기 때문에 공용 분기는이를 동기화 할 수 없습니다. 여전히, 하위 모듈이 프로젝트가 작동하도록 동기화되지 않은 경우 (즉, 누락 된 파일 등을보고하지 않음) 해당 폴더에 특정 스텁 파일이 **있을 수있는 문제가 있습니다. – LearnCocos2D