리포지토리의 .git 디렉토리를 부모 디렉토리로 이동할 수 있습니까?
-
03-07-2019 - |
문제
따라서 저장소가있는 두 개의 하위 디렉토리가 있습니다.
PPP/
|--ABC/
| |--.git/
| |--AAA/
| | BBB/
| | CCC/
|
|--DEF/
| |--.git/
| |--DDD/
| |--EEE/
그리고 그것들을 하나의 저장소로 결합하고 싶으므로 디렉토리 구조가 다음과 같을 것이라고 가정합니다.
PPP/
|--.git/
|--ABC/
| |--AAA/
| |--BBB/
| |--CCC/
|
|--DEF/
| |--DDD/
| |--EEE/
이게 입을 수 있습니까?
또한 현재 여러 사람들이 기계에 저장소를 가지고 있습니다. 그것이 인생을 얼마나 복잡하게 만들까요?
고마워.
해결책
다음과 같이 묘사하는 일을 할 수 있습니다.
내용을 이동하십시오
ABC
anABC/
하위 디렉토리, 역사가 항상 존재하는 것처럼 보이도록 역사를 수정하십시오.$ 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
내용에 대해 동일합니다
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
마지막으로,
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를 포함하는 새로운 저장소를 만드는 것입니다.이 두 가지로부터 오래된 리포를 유지하여 역사를 백업 하고이 새로운 프로젝트를 통해 새로운 역사를 시작하는 것입니다.