리포지토리의 .git 디렉토리를 부모 디렉토리로 이동할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/614229

문제

따라서 저장소가있는 두 개의 하위 디렉토리가 있습니다.

PPP/
 |--ABC/
 |   |--.git/
 |   |--AAA/
 |   |    BBB/
 |   |   CCC/
 |   
 |--DEF/
 |   |--.git/
 |   |--DDD/
 |   |--EEE/

그리고 그것들을 하나의 저장소로 결합하고 싶으므로 디렉토리 구조가 다음과 같을 것이라고 가정합니다.

PPP/
 |--.git/
 |--ABC/
 |   |--AAA/
 |   |--BBB/
 |   |--CCC/
 |   
 |--DEF/
 |   |--DDD/
 |   |--EEE/

이게 입을 수 있습니까?

또한 현재 여러 사람들이 기계에 저장소를 가지고 있습니다. 그것이 인생을 얼마나 복잡하게 만들까요?

고마워.

도움이 되었습니까?

해결책

다음과 같이 묘사하는 일을 할 수 있습니다.

  1. 내용을 이동하십시오 ABC an ABC/ 하위 디렉토리, 역사가 항상 존재하는 것처럼 보이도록 역사를 수정하십시오.

    $ cd /path/to/ABC
    $ git filter-branch --index-filter \
        'git ls-files -s | sed "s-\t-&ABC/-" |
         GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
         git update-index --index-info &&
         mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
    

    이제 디렉토리 구조입니다 ABC/ABC/your_code

  2. 내용에 대해 동일합니다 DEF:

    $ cd /path/to/DEF
    $ git filter-branch --index-filter \
        'git ls-files -s | sed "s-\t-&DEF/-" |
         GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
         git update-index --index-info &&
         mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
    

    이제 디렉토리 구조입니다 DEF/DEF/your_code

  3. 마지막으로, PPP 저장소와 둘 다 당깁니다 ABC 그리고 DEF 그것에 :

    $ mkdir /path/to/PPP
    $ cd /path/to/PPP
    $ git init
    $ git pull /path/to/ABC
    $ git pull /path/to/DEF
    

    이제 당신은 가지고 있습니다 PPP/ABC/your_code 그리고 PPP/DEF/your_code, 모든 역사와 함께.

모든 사람이 동기화되기 위해서는 집단이 시스템에서 이전 명령을 실행하도록 요청해야 할 것입니다.

메모: 펑키 filter-branch 명령 남자 페이지에서 나옵니다. :-)

다른 팁

두 개의 기존 리포지토리를 하나의 저장소로 병합해야합니까, 아니면 그룹화하고 싶습니까?

단지 그룹을 그룹화하려면 Git-Submodule이 원하는 것을 수행합니다. 최상위 ONE이 현재 2로 연결되는 3 개의 리포지토리로 끝납니다.

가이드로써:

  • 더 이상 다른 버전의 Repo B와 함께 한 버전의 Repo A를 사용하는 것이 합리적이지 않도록 그들 사이의 커플 링을 늘리려면 단일 저장소로 병합해야합니다.

  • 서브 모듈이 다소 분리되어 있으면 서브 모듈을 사용해야하지만 (때로는 분리 된 상태에서 일하는 것이 합리적이지만) 함께 일할 수있는 편의를 원합니다 (예 : 두 가지 모두에서 모두 알려진 공인 상태가 모두 다운로드합니다. , 등).

하위 모듈을 사용하면 역사가 변하지 않기 때문에 저장소의 기존 사본에 문제가 발생하지 않습니다. 그것들을 병합하면 새로운 역사가 만들어지며 기존 지점에서 일하는 사람들이 변화를 병합하기가 더 어려울 것입니다.

나에게는 두 프로젝트의 역사가 합병되지 않기 때문에 원하는 방식으로 수행하기가 어려워 보입니다.

저의 최선의 조언은 ABC와 DEF를 포함하는 새로운 저장소를 만드는 것입니다.이 두 가지로부터 오래된 리포를 유지하여 역사를 백업 하고이 새로운 프로젝트를 통해 새로운 역사를 시작하는 것입니다.

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