2013-01-21 2 views
6

일부 소스 코드 (S)를 공유하는 두 개의 긴밀한 프로젝트 (A와 B)가 있습니다. 둘 다 동시에 릴리스되며 출시 된 버전은 항상 동일한 버전의 공유 코드를 사용해야합니다. 공유 코드 S는 합리적으로 자주 변경됩니다.git에서 두 프로젝트 간 코드 공유

그래서,이 같은 언젠가 볼 것이다 :

  • 버전 1은 B 버전 1 버전 2는 S 버전을 사용하는 S 버전 1
  • 사용 1
  • S 버전을 사용하는 2
  • B 버전 2는 S 버전 2를 사용합니다.

git (및/또는 git을 사용하는 일부 도구)에서 이것을 처리하는 가장 좋은 방법은 무엇입니까? 여기

내 관심사 :

  • 프로젝트 A와 프로젝트 B는 별도의 저장소에 있어야합니다 (그들은 관련이 있습니다,하지만 난 그들 사이의 코드의 자유로운 흐름 싶지 않아)
  • 하는 경우를 한 프로젝트에서 업데이트 된 공유 코드는 다른 코드에서 자동으로 업데이트되어야합니다 (개발자가 무언가를하는 것을 잊었을 때 상황을 원하지 않고 구 버전의 공유 코드를 갖게됩니다).

정식 답변 중 하나가 "git submodule 사용"이라는 것을 알고 있습니다. 그러나, 나는이 접근법에 대해 다소 criticism을 읽었다. 좀처럼 바뀌지 않는 공유 라이브러리에 맞게 설계된 것 같았습니다. 내가

git subtree을 사용하고 있었다 읽고 덜 대중적인 접근 방식의 부부가

또 다른 방법 : RepoGitSlave

은 무엇 코드 공유의이 유형을 처리하는 가장 좋은 방법이 될 것입니다?

+0

링크가 좋은 것은 아니지만 서브 트리를 고정했지만 다른 것들을 추측 할 수는 없습니다. (자식 서브 모듈과 비판을 사용하십시오) – CharlesB

+0

고마워요. 나는 하나를 제외한 모든 링크를 고쳤다. 만약 내가 그것을 삽입, 어떤 이유로 그것은 잘못된 링크에 연결되어있어. –

+0

직접 코드 다운 코드 – CharlesB

답변

3

아주 간단한 해결책은 A, B, S 세 개의 저장소를 사용하는 것입니다. 프로젝트 저장소 A와 B는 개발자가 저장소에 푸시 된 최신 코드를 사용하고 있는지 확인하기 위해 Makefile을 체크합니다. 예

check: 
     git fetch /path/to/S master:tip 
     git branch --contains tip | grep -q master 

개발자에게는 공유 저장소의 이전 버전이있는 경우 두 번째 줄의 값은 0이 아닙니다. 이렇게하면 컴파일이 중단되고 오류가 발생합니다. 그러면 개발자는 수동으로 저장소를 가져 와서 계속 진행할 수 있습니다.

S의 마스터 분기를 검사하는 대신 개발자가 항상 사용해야하는 것으로 정의 된 다른 분기를 확인할 수도 있습니다.