문제

다양한 프로젝트에서 사용할 JavaScript 및 CSS 마스터 파일 및 스크립트를 모두 보관할 수있는 GIT 미디어 저장소가 있습니다.

자체 git 저장소에있는 새 프로젝트를 만들면 새 프로젝트의 미디어 저장소에서 JavaScript 파일을 사용하여 변경할 때 스크립트의 두 사본을 업데이트 할 필요가 없습니다. ?

도움이 되었습니까?

해결책

열쇠는 git 서브 모듈.

Sub -Modules 장을 읽기 시작하십시오 git 커뮤니티 북 또는 사용 설명서

리포지토리 프로젝트 1, Project2 및 미디어가 있다고 가정 해보십시오 ...

cd /path/to/PROJECT1
git submodule add ssh://path.to.repo/MEDIA
git commit -m "Added Media submodule"

다른 저장소에서 반복하십시오 ...

이제 멋진 점은 미디어에 변경을 할 때마다 다음을 수행 할 수 있다는 것입니다.

cd /path/to/PROJECT2/MEDIA
git pull
cd ..
git add MEDIA
git commit -m "Upgraded media to version XYZ"

이것은 Project2 내의 미디어 서브 모드가 이제 버전 XYZ에 있다는 사실을 방금 기록했습니다.

각 프로젝트가 사용하는 미디어 버전을 100% 제어합니다. git 서브 모듈 훌륭하지만 실험하고 배워야합니다.

큰 힘으로 럼프에 물릴 수있는 좋은 기회가 생깁니다.

다른 팁

사용을 고려하십시오 하위 트리 하위 모듈 대신에 리포 사용자의 삶을 훨씬 쉽게 만들 수 있습니다. 더 자세한 가이드를 찾을 수 있습니다 프로 git 책.

내가 당신의 문제를 잘 이해한다면 당신은 다음과 같은 것을 원합니다.

  1. 많은 프로젝트에서 사용하는 단일 git 저장소에 미디어 파일을 저장하십시오.
  2. 로컬 컴퓨터의 프로젝트에서 미디어 파일을 수정하면 모든 프로젝트에 즉시 나타나야합니다 (따라서 항상+푸시+를 당기고 싶지는 않습니다).

불행히도 원하는 것에 대한 궁극적 인 해결책은 없지만 인생을 더 쉽게 만들 수있는 것들이 있습니다.

먼저 하나의 중요한 사항을 결정해야합니다. 프로젝트 저장소의 모든 버전에 대해 미디어 파일의 버전에 대한 참조를 저장 하시겠습니까? 예를 들어 example.com이라는 프로젝트가있는 경우 2 주 전에 사용한 스타일을 알고 있어야합니까?

그것을 알 필요가 없다면 솔루션은 쉽습니다.

  1. 미디어 파일 용 저장소 및 각 프로젝트마다 하나씩 리포지토리를 만듭니다.
  2. 프로젝트에서 로컬로 복제 된 미디어 저장소를 가리키는 상징적 링크를 만듭니다. 상대적인 기호 링크 (예 :/media)를 생성하고 모든 사람이 프로젝트를 확인하여 미디어 디렉토리가 같은 장소에 있거나 기호 링크의 이름을 .gitignore에 작성한다고 가정 할 수 있습니다. 미디어 파일을 넣는 곳.

그러나 대부분의 경우이 버전 작성 정보를 알고 싶습니다. 이 경우 두 가지 선택이 있습니다.

  1. 모든 프로젝트를 하나의 큰 저장소에 저장하십시오. 이 솔루션의 장점은 미디어 저장소의 사본이 1 개 밖에 없다는 것입니다. 큰 단점은 프로젝트 버전간에 전환하기가 훨씬 어렵다는 것입니다 (다른 버전으로 체크 아웃하는 경우 항상 모든 프로젝트를 수정합니다).

  2. 하위 모듈을 사용하십시오 (답 1에 설명 된대로). 이렇게하면 미디어 파일을 하나의 리포지토리에 저장하고 프로젝트에는 특정 미디어 저장소 버전에 대한 참조 만 포함됩니다. 그러나 이러한 방식으로 일반적으로 미디어 저장소의 많은 현지 사본이 있으며 모든 프로젝트에서 미디어 파일을 쉽게 수정할 수 없습니다.

내가 당신이라면 아마도 첫 번째 또는 세 번째 솔루션 (기호 링크 또는 하위 모듈)을 선택할 것입니다. 하위 모듈을 사용하기로 선택한 경우 여전히 인생을 편하게하기 위해 많은 일을 할 수 있습니다.

  1. 커밋하기 전에 하위 모듈 디렉토리의 이름을 바꾸고 Symlink를 공통 미디어 디렉토리에 넣을 수 있습니다. 커밋 할 준비가되면 Symlink를 제거하고 하위 모듈을 다시 제거한 다음 커밋 할 수 있습니다.

  2. 미디어 저장소 사본 중 하나를 모든 프로젝트에 원격 저장소로 추가 할 수 있습니다.

이 방법으로 로컬 디렉토리를 리모컨으로 추가 할 수 있습니다.

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 포함).

나는 다른 대답이 제안하는 하위 트리와 서브 모듈에 문제가있었습니다.

대신, 나는 Symlinks를 사용하여 결국 잘 작동하는 것처럼 보이므로 여기에 가능한 대안으로 게시하고 있습니다.

여기에는 완전한 가이드가 있습니다. http://www.howtogeek.com/howto/16226/complete-guide-to-symbolic-links-symlinks-on-windows-or-linux/

그러나 기본적으로 높은 명령 프롬프트에서 두 경로를 mklink하면됩니다. /j 하드 링크 접두사를 사용해야합니다. 이 라인을 따라 무언가 : mklink /jc : projects mainProject 플러그인 C : Projects someplugin

상대 폴더 경로를 사용하여 프로젝트를 처음 확인할 때 각 사람이 실행하기 위해 박쥐에 넣을 수 있습니다.

예 : mklink /j. assets taqtiletools .. taqtileholotools

폴더가 연결되면 기본 저장소 내 폴더를 참조하는 폴더를 무시해야 할 수도 있습니다. 그렇지 않으면 당신은 가기에 좋습니다.

메모 그 게시물이 이것에 대한 중복 질문으로 표시되어 있기 때문에 다른 게시물에서 중복 답변을 삭제했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top