2013-03-26 2 views
1

많은 질문 Q & A를 보았 기 때문에 중복 된 질문처럼 보일 수 있습니다. 그러나 나는 내가 발견 할 수있는 모든 것들 (여기와 웹 전반)을 읽었으며 아직도 대답이 없다.별도의 Git 프로젝트 (저장소)에서 공유 된 저장소

우리는 현재 VCS로 SVN (Tortoise and Ankh가 도구 임)을 사용하고 있으며 Git 으로의 이전을 고려 중입니다. 우리의 관심은 분기가 관련된 더 나은 기능을 얻는 데 있습니다. 단순하게, 우리의 프로젝트는 다음과 같이이다 :

Project1 
Project2 
SharedCode 

이 두 프로젝트의 각각은 SharedCode에 밀접하게 의존 (사실, 그들은 분리 될 수 없다). 따라서 Project1에서 작업 할 경우 Project1과 SharedCode (항상)로 구성된 저장소를 체크 아웃 할 수 있어야합니다. Project2와 마찬가지로 Project2와 SharedCode로 구성되어야합니다.

이름에서 알 수 있듯이 SharedCode는 공유 라이브러리, 공유 프로젝트 및 참조 파일의 모음입니다. 각 프로젝트는 Visual Studio 솔루션의 솔루션과 같습니다. 즉, 각각은 실제로 VC# 코드 프로젝트 모음입니다. 이러한 개별 VC# 프로젝트는 참조 DLL 또는 SharedCode 디렉토리에있는 다른 VC# 코드 프로젝트와 같은 SharedCode의 항목에 대한 참조를 가질 것입니다.

내가 정말로 강조하고 싶은 것은 구조가 내 문제의 가장 중요한 부분이라는 것입니다. "링크 된"코드 (즉, SharedCode)를 특정 커밋으로 만드는 방법을 사용할 수 없습니다. Project 1 또는 Project 2와 마찬가지로 항상 HEAD (가장 최근 게시 된 코드) 여야합니다.

이제 각 저장소를 개별적으로 만들고 각각을 개별적으로 확인할 수 있음을 이해합니다. 그러나 내가 분지를 원할 때 어떻게됩니까? 다음은 잠재적으로 위험한 상황의 예입니다.

나는 Project1 및 SharedCode를 분기하고 각각 체크 아웃했습니다. 또한 Project2 체크 아웃 있지만 분기되지 않습니다. Project2에서 작업을 시작하지만 Project2에서 SharedCode의 코드 페이지를 사용하기 때문에 분기되지 않은 Project2와 분기 된 SharedCode의 하이브리드에서 작업 할 수있었습니다.

그래서 요약하면 Project1과 SharedCode 또는 Project2와 SharedCode를 항상 해당 쌍으로 체크 아웃 할 수 있기를 원합니다. 반대로 모든 코드가 정렬되도록 변경 사항을 함께 커밋 할 수 있어야합니다.

내 옵션에는 어떤 것이 있습니까? 이 시나리오를 처리하고 위험한 상황을 피하는 방법에 대해 비슷한 요구 사항이나 경험이 있습니까?

새로운 Git 저장소를 구성하는 데 도움을 주셔서 감사합니다.

답변

0

이야기를 끝내기 위해서 말하자면 여기에 우리가 한 일이 있습니다. 우리는 공유 저장소가있는 구조를 시도하는 대신 Project1, Project2 및 SharedCode를 모두 포함하는 단일 대형 저장소를 만드는 것을 선택했습니다. 이것은 더 많은 것들이 복사되고 지점/태그에 포함되는 것을 의미 할 것이지만 궁극적으로 각 프로젝트가 항상 그것이 필요로하는 SharedCode를 갖도록하는 것을 가장 용이하게한다.

0

나는 당신이 너무 당겨 SharedCode를 밀어 수 있도록, 잡아 당기거나 밀어 후 시작 스크립트를 정의 할 수 있습니다 githooks와

man githook (online manpage)

에서 봐한다고 생각합니다. 나는 무엇이 가능한지 정말로 모른다. 그러나 아마 이것은 당신을 조금 도와 줄 것이다.

+0

"이 모든 것을 함께 얻으십시오"및 "모두 함께 추진하는"프로세스 중 일부를 자동화하는 데 도움이 될 수 있다는 것에 동의합니다. 그러나 프로젝트 작업 사본이 위험한 하이브리드 상태에 들어 가지 않도록하는 것이 주요 관심사를 해결하는 데 도움이되지 않습니다. – DonBoitnott

+0

오케이, 나는 너를 이해하지 못한다. 프로젝트가 지사에 푸시되고 모든 끌어 오기가 공유 마스터에서 가져 오는 경우에도 공유의 모든 푸시가 마스터로 푸시되기를 원합니? 프로젝트는 항상 공유 헤드를 사용합니까? –

+0

번호 Project1과 SharedCode가 분기되지만 Project2는 그렇지 않은 시나리오 예를 다시 참조하십시오. 물리적으로 Project2 코드를 열면 SharedCode 디렉토리에서 참조되는 파일이 표시되므로 "하이브리드"상태입니다. 나는 _think_가 HEAD Project2인데 일하고 있는데, 실제로는 지점의 SharedCode 파일을 수정하고 있습니다. 이 위험한 상태에 들어갔을 때 쉽게 알 수 없으므로 의도하지 않은 변경이 HEAD/지선을 통해 적용될 수 있습니다. – DonBoitnott

관련 문제