programing

다른 리포지토리 내의 깃 리포지토리로 작업하려면 어떻게 해야 합니까?

oldcodes 2023. 5. 29. 11:09
반응형

다른 리포지토리 내의 깃 리포지토리로 작업하려면 어떻게 해야 합니까?

저는 다양한 프로젝트에 사용할 자바스크립트와 CSS 마스터 파일과 스크립트를 모두 보관하는 Git 미디어 저장소를 가지고 있습니다.

자체 Git 저장소에 있는 새 프로젝트를 생성하는 경우, 변경할 때 스크립트의 두 복사본을 모두 업데이트할 필요가 없도록 새 프로젝트의 미디어 저장소에서 JavaScript 파일을 어떻게 사용합니까?

핵심은 Git 서브모듈입니다.

Git Community Book 또는 사용자 설명서의 Submodules 장 읽기 시작

저장소 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"

여기에는 프로젝트 2 내의 미디어 하위 모듈이 현재 버전 XYZ에 있다는 사실이 기록되어 있습니다.

각 프로젝트에서 사용하는 미디어 버전을 100% 제어할 수 있습니다.git 서브모듈은 훌륭하지만, 당신은 그것들에 대해 실험하고 배울 필요가 있습니다.

강력한 힘으로 엉덩이를 물릴 수 있는 좋은 기회가 옵니다.

서브모듈 대신 서브트리를 사용하면 리포 사용자의 삶이 훨씬 편해질 것입니다.Pro Git 책에서 더 자세한 가이드를 찾을 수 있습니다.

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

  1. 미디어 파일을 여러 프로젝트에서 사용하는 단일 Git 저장소에 저장
  2. 로컬 컴퓨터의 프로젝트에서 미디어 파일을 수정하면 다른 모든 프로젝트에서 미디어 파일이 즉시 표시됩니다(항상 커밋 + 푸시 + 풀).

불행하게도 여러분이 원하는 것에 대한 궁극적인 해결책은 없지만, 여러분의 삶을 더 쉽게 만들 수 있는 몇 가지가 있습니다.

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

이를 알 필요가 없다면 솔루션은 간단합니다.

  1. 각 프로젝트에 대해 미디어 파일 및 미디어 파일 저장소 생성
  2. 로컬로 복제된 미디어 저장소를 가리키는 심볼릭 링크를 프로젝트에 만듭니다.상대적인 심볼릭 링크(예: ..../media)를 생성하여 모든 사용자가 프로젝트를 체크아웃하여 미디어 디렉터리가 같은 위치에 있도록 하거나 심볼릭 링크의 이름을 .gitignore에 기록하여 모든 사용자가 미디어 파일을 저장할 위치를 결정할 수 있습니다.

그러나 대부분의 경우 이 버전 정보를 알고자 합니다.이 경우 두 가지 옵션이 있습니다.

  1. 모든 프로젝트를 하나의 큰 저장소에 저장합니다.이 솔루션의 장점은 미디어 저장소의 복사본이 하나만 있다는 것입니다.큰 단점은 프로젝트 버전 간 전환이 훨씬 어렵다는 것입니다(다른 버전으로 체크아웃하면 항상 모든 프로젝트를 수정합니다).

  2. 하위 모듈을 사용합니다(정답 1 참조).이렇게 하면 미디어 파일을 하나의 저장소에 저장하고 프로젝트에는 특정 미디어 저장소 버전에 대한 참조만 포함됩니다.그러나 이렇게 하면 일반적으로 미디어 저장소의 로컬 복사본이 많이 생성되므로 모든 프로젝트에서 미디어 파일을 쉽게 수정할 수 없습니다.

내가 당신이라면 첫 번째 또는 세 번째 솔루션(상징 링크 또는 하위 모듈)을 선택할 것입니다.서브모듈을 사용하기로 선택하더라도 삶을 더 편하게 하기 위해 많은 일을 할 수 있습니다.

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

  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 submodule, subtree 등과 같은 git submodule, subtree 등과 함께 작업하기가 쉬워야 합니다.그들은 그 일을 할 수 있지만, 저는 그들이 쉽거나 실수하기 쉽다고 생각하지 않습니다.

"git repos 내의 git repos"는 어렵지 않아도 됩니다. 제 simple-git-subrepos 예를 참조하십시오.

다른 답변에서 제안하는 하위 트리와 하위 모듈에 문제가 있었습니다. 주로 소스 트리를 사용하고 있는데 버그가 많은 것 같습니다.

대신 SymLinks를 사용하게 되었는데, 잘 작동하는 것 같아서 가능한 대안으로 여기에 게시합니다.

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

그러나 기본적으로 상승된 명령 프롬프트에서 두 경로를 mklink하기만 하면 됩니다./J 하드 링크 접두사를 사용해야 합니다.mklink /JC:\projects\MainProjects\plugins C:\projects\일부 플러그인

또한 상대 폴더 경로를 사용하여 프로젝트를 처음 체크아웃할 때 각 사용자가 실행할 배트에 넣을 수 있습니다.

예: mklink /J.\Assets\작업 타일 도구...\Taqtile 홀로 도구

폴더가 연결되면 기본 리포지토리에서 폴더를 참조하는 폴더를 무시해야 할 수 있습니다.그렇지 않으면 가도 좋습니다.

참고 다른 게시물에 중복 질문으로 표시된 게시물에서 중복 답변을 삭제했습니다.

언급URL : https://stackoverflow.com/questions/1811730/how-do-i-work-with-a-git-repository-within-another-repository

반응형