답변:
핵심은 자식 서브 모듈 입니다.
Git 커뮤니티 북 또는 사용자 매뉴얼 의 서브 모듈 장을 읽기 시작하십시오
PROJECT1, PROJECT2 및 MEDIA 저장소가 있다고 가정하십시오 ...
cd /path/to/PROJECT1
git submodule add ssh://path.to.repo/MEDIA
git commit -m "Added Media submodule"
다른 리포지토리에서 반복하십시오 ...
이제 멋진 점은 MEDIA에 대한 변경 사항을 커밋 할 때마다 다음과 같이 할 수 있다는 것입니다.
cd /path/to/PROJECT2/MEDIA
git pull
cd ..
git add MEDIA
git commit -m "Upgraded media to version XYZ"
이것은 방금 PROINECT2의 MEDIA 서브 모듈이 이제 XYZ 버전이라는 사실을 기록했습니다.
각 프로젝트가 사용하는 MEDIA 버전을 100 % 제어 할 수 있습니다. 자식 서브 모듈 은 훌륭하지만 실험하고 그것에 대해 배워야합니다.
큰 힘으로 엉덩이에 물릴 수있는 좋은 기회가옵니다.
하위 모듈 대신 하위 트리 를 사용하면 repo 사용자의 삶이 훨씬 쉬워집니다. 자세한 내용은 Pro Git book을 참조하십시오 .
문제를 잘 이해하면 다음을 원합니다.
불행히도 원하는 것에 대한 궁극적 인 해결책은 없지만 인생을 더 쉽게 만들 수있는 몇 가지가 있습니다.
먼저 중요한 한 가지를 결정해야합니다. 미디어 파일의 버전에 대한 참조를 프로젝트 저장소의 모든 버전에 저장 하시겠습니까? 예를 들어 example.com이라는 프로젝트가있는 경우 2 주 전에 어떤 style.css를 사용 했습니까, 아니면 최신 버전이 항상 (또는 대부분) 가장 좋은지 알아야합니까?
그것을 알 필요가 없다면 해결책은 쉽습니다.
그러나 대부분의 경우이 버전 정보를 알고 싶습니다. 이 경우 두 가지 선택이 있습니다.
모든 프로젝트를 하나의 큰 저장소에 저장하십시오. 이 솔루션의 장점은 미디어 저장소의 사본이 하나만 있다는 것입니다. 가장 큰 단점은 프로젝트 버전간에 전환하기가 훨씬 어렵다는 것입니다 (다른 버전으로 체크 아웃하면 항상 모든 프로젝트를 수정 함)
서브 모듈을 사용하십시오 (답변 1에 설명 된대로). 이 방법으로 미디어 파일을 하나의 저장소에 저장하고 프로젝트에는 특정 미디어 저장소 버전에 대한 참조 만 포함됩니다. 그러나이 방법으로 보통 미디어 저장소의 많은 로컬 사본이 있으며 모든 프로젝트에서 미디어 파일을 쉽게 수정할 수는 없습니다.
내가 당신이라면 아마 첫 번째 또는 세 번째 솔루션 (기호 링크 또는 하위 모듈)을 선택했을 것입니다. 하위 모듈을 사용하기로 선택하면 인생을 더 쉽게하기 위해 많은 일을 할 수 있습니다.
커밋하기 전에 서브 모듈 디렉토리의 이름을 바꾸고 공통 미디어 디렉토리에 심볼릭 링크를 넣을 수 있습니다. 커밋 할 준비가되면 심볼릭 링크를 제거하고 하위 모듈을 다시 제거한 다음 커밋 할 수 있습니다.
미디어 저장소 사본 중 하나를 모든 프로젝트에 대한 원격 저장소로 추가 할 수 있습니다.
이 방법으로 로컬 디렉토리를 원격으로 추가 할 수 있습니다.
cd /my/project2/media
git remote add project1 /my/project1/media
/ my / project1 / media에서 파일을 수정하면 파일을 커밋하여 원격 서버로 푸시하지 않고 / my / project2 / media에서 가져올 수 있습니다.
cd /my/project1/media
git commit -a -m "message"
cd /my/project2/media
git pull project1 master
다른 사용자와 공유하지 않았기 때문에 나중에 커밋을 제거 할 수 있습니다 (git reset 사용).
서브 트리와 서브 모듈에 문제가 있었는데, 다른 답변에서 제안하는 것은 ... 주로 SourceTree를 사용하고 있기 때문에 상당히 버그가있는 것 같습니다.
대신 SymLinks를 사용하여 정상적으로 작동하는 것 같으므로 가능한 대안으로 여기에 게시하고 있습니다.
여기에 완전한 가이드가 있습니다 : http://www.howtogeek.com/howto/16226/complete-guide-to-symbolic-links-symlinks-on-windows-or-linux/
그러나 기본적으로 관리자 권한 명령 프롬프트에서 두 경로를 mklink하면됩니다. / J 하드 링크 접두사를 사용해야합니다. mklink / JC : \ projects \ MainProject \ plugins C : \ projects \ SomePlugin
상대 폴더 경로를 사용하여 프로젝트를 처음 체크 아웃 할 때 각 사람이 실행할 수 있도록 박쥐에 넣을 수도 있습니다.
예 : mklink / J. \ Assets \ TaqtileTools .. \ TaqtileHoloTools
폴더가 연결되면이를 참조하는 기본 저장소 내의 폴더를 무시해야 할 수도 있습니다. 그렇지 않으면 갈 수 있습니다.
참고 해당 게시물이이 게시물에 대한 중복 질문으로 표시되어 다른 게시물에서 중복 답변을 삭제했습니다.