Git-심볼릭 링크 처리 방법
git에서 심볼릭 링크를 처리하는 올바른 방법은 무엇입니까?
다음과 같은 구조가 있습니다.
Vendors
Module A
Module B
Module C
App
Code
Modules
Core Module 1
Core Module 2
Module A (symlinked to vendors)
Module B (symlinked to vendors)
Module C (symlinked to vendors)
응용 프로그램의 모든 핵심 코드를 포함하는 기본 App 디렉토리가 있습니다. 또한 기본 앱 디렉토리에 심볼릭 링크되어 통합되는 모듈이 포함 된 공급 업체 디렉토리가 있습니다.
중요한 것은 공급 업체 디렉터리와 기본 앱 디렉터리가 모두 동일한 저장소에서 버전 관리된다는 것입니다.
따라서 git이 심볼릭 링크를 계속 저장하도록해야합니까, 아니면 심볼릭 링크를 무시하도록하는 방법을 찾아야합니까?
Git은 모든 개발자가 사용하는 운영 체제가 지원하는 한 심볼릭 링크를 잘 처리 할 수 있습니다. 이러한 심볼릭 링크가있는 것에 의존하기 때문에 개발 환경이 모두 심볼릭 링크를 지원한다고 가정합니다.
무언가가 git 저장소에 포함되어야하는지 여부 (symlink 또는 기타)를 결정하려면 다음을 고려하십시오.
- 저장소의 일부 도구 또는 다른 프로세스에서 생성 된 파일입니까? 그렇다면이를 무시하고 각 사용자가 파일을 생성하여 항상 최신 버전을 사용하도록하는 것이 가장 좋습니다.
- 특정 사용자의 개발 환경에 특정한 파일입니까, 아니면 모든 환경에서 사용되는 파일입니까? Emacs 백업 파일을 무시하는 구성과 같이 특정 사용자 환경의 특이한 경우에는 저장소에 속하지 않습니다. 모든 개발자에게 필요한 것이거나 프로덕션 용 애플리케이션을 빌드하는 데 필요한 것이면 저장소에 있어야합니다.
귀하의 경우에는 심볼릭 링크가 생성되지 않고 모든 환경에서 필요한 것처럼 보이므로 저장소에 넣는 것이 좋습니다.
그러나 생성 할 때 절대 심볼릭 링크가 아닌 상대 심볼릭 링크로 생성해야 저장소가 복제 된 위치에 관계없이 작동합니다. 이를 수행하는 가장 쉬운 방법은 디렉토리를 Modules 디렉토리로 변경하고 거기에서 심볼릭 링크를 만드는 것입니다.
cd App/Code/Modules
ln -s "../../../Vendors/Module A" "Module A"
Git은 버전 제어의 다른 파일과 마찬가지로 심볼릭 링크를 저장합니다. 심볼릭 링크를 제외하고는 심볼릭 링크가있는 경로에 대한 정보 만 저장하고 파일 유형은 일반 파일 대신 심볼릭 링크로 저장합니다.
심볼릭 링크가 디렉토리를 가리키는 경우 git은 심볼릭 링크 된 디렉토리 아래에 콘텐츠를 저장하지 않습니다.
따라서 귀하의 경우에 git로 버전이 지정된 심볼릭 링크를 저장하는 데 아무런 해가 없어야합니다.
심볼릭 링크에 대해 알아야 할 또 한 가지 사항은 git이 가리키는 파일이나 디렉토리가 아닌 새 복제본에서만 심볼릭 링크를 다시 생성한다는 것입니다. 심볼릭 링크 된 경로가 존재하지 않을 가능성이 있습니다 (예 : 절대 경로를 사용할 때).
@Tuxdude "... 그러면 당신은 뭔가 잘못하고 있습니다"라는 말에 전혀 동의 할 수 없습니다. 예를 들어, 미디어 폴더를 웹 서버의 다른 드라이브 또는 NFS에 배치해야하는 경우 버전 제어 외부에 배치해야합니다. 따라서 심볼릭 링크 된 미디어 폴더 내부의 콘텐츠는 설명한대로 버전 관리를 통해 액세스 할 수 없습니다. 그러나 그것은 당신이 그렇게해야하는 시나리오입니다. 그리고 그것은 b에서 정말 고통 스럽습니다 ... 내 시나리오는 훨씬 더 복잡합니다 (자세히 설명하지는 않겠습니다). 실제로 찾고있는 것은 심볼릭 링크 폴더의 하위 폴더를 버전 관리에 추가하는 것입니다. git에서 하위 폴더 유형 자체의 변경 사항을 무시할 수있는 옵션이 필요합니다. 예를 들어, 기본 구조 :
- 앱 / 미디어 / bla
- 앱 / 미디어 / 블 러브
내용없이 git 버전 관리에 해당 폴더가 필요합니다.
웹 서버 (동일한 버전 관리)에서 이러한 폴더는 다음과 같습니다 (심볼 링크).
- app / media / bla => 완전히 다른 곳
- app / media / blubb => 완전히 다른 곳에 다시
개발자는 첫 번째 단계에서 설명한대로 로컬 환경에 원래 버전 구조 만 있어야합니다 (심볼 링크 없음). 그러나 웹 서버에는 다른 NFS 시스템에 대한 심볼릭 링크가 있습니다.
누군가이 문제를 해결하는 방법을 알고 있다면 아직 해결책을 찾지 못했기 때문에 정말 감사하겠습니다.
내가 지금하고있는 유일한 방법은 로컬 환경에 대해 정확하고 다른 구조를 만드는 빌더를 사용하는 것이며 서버와 미디어 하위 폴더는 현재 gitignore에 의해 완전히 무시됩니다. 그러나 그것은 때때로 까다 롭거나 유지하기 어려울 수 있습니다.
참고URL : https://stackoverflow.com/questions/15465436/git-how-to-handle-symlinks
'Development Tip' 카테고리의 다른 글
Maven 종속성 해결 (충돌) (0) | 2020.11.10 |
---|---|
web.xml에서 applicationContext.xml 파일 대신 Spring @Configuration 주석이 달린 클래스를 등록하는 방법은 무엇입니까? (0) | 2020.11.10 |
netbeans에 "Waiting For Connection (netbeans-xdebug)"이 표시됨 (0) | 2020.11.10 |
Go에서 POST 요청을 보내는 방법은 무엇입니까? (0) | 2020.11.10 |
Docker : 컨테이너가 계속 다시 시작됨 (0) | 2020.11.10 |