여기 내가 준 해결책이 있습니다 .
먼저 phd 디렉토리의 전체 백업을 수행하십시오. 수년간의 노력으로 잃어버린 책임을지지 않기를 바랍니다! ;-)
$ cp -r phd phd-backup
의 내용 이동 phd/code
에를 phd/code/code
, 그리고 그것이 항상 (이 용도의 자식의이 계속 것처럼 보이도록 역사를 수정 필터 분기 명령) :
$ cd phd/code
$ git filter-branch --index-filter \
'git ls-files -s | sed "s#\t#&code/#" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
git update-index --index-info &&
mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
의 내용에 대해 동일 phd/figures
하고 phd/thesis
(다만 교체 code
로 figures
하고 thesis
).
이제 디렉토리 구조는 다음과 같아야합니다.
phd
|_code
| |_.git
| |_code
| |_(your code...)
|_figures
| |_.git
| |_figures
| |_(your figures...)
|_thesis
|_.git
|_thesis
|_(your thesis...)
그런 다음 루트 디렉토리에 git 저장소를 작성하고 모든 것을 가져 와서 이전 저장소를 제거하십시오.
$ cd phd
$ git init
$ git pull code
$ rm -rf code/code
$ rm -rf code/.git
$ git pull figures --allow-unrelated-histories
$ rm -rf figures/figures
$ rm -rf figures/.git
$ git pull thesis --allow-unrelated-histories
$ rm -rf thesis/thesis
$ rm -rf thesis/.git
마지막으로 원하는 것을 갖추어야합니다.
phd
|_.git
|_code
| |_(your code...)
|_figures
| |_(your figures...)
|_thesis
|_(your thesis...)
이 절차의 한 가지 좋은 점은 버전이 지정되지 않은 파일과 디렉토리를 그대로 두는 것입니다.
도움이 되었기를 바랍니다.
귀하의 경우 : 비록 경고의 한 단어 code
디렉토리가 이미이 code
하위 디렉토리 나 파일을, 일이 아주 잘못 될 수도 있습니다 (에 대한 동일 figures
하고 thesis
물론). 이 경우이 전체 절차를 수행하기 전에 해당 디렉토리 또는 파일의 이름을 바꾸십시오.
$ cd phd/code
$ git mv code code-repository-migration
$ git commit -m "preparing the code directory for migration"
절차가 완료되면이 마지막 단계를 추가하십시오.
$ cd phd
$ git mv code/code-repository-migration code/code
$ git commit -m "final step for code directory migration"
물론, code
서브 디렉토리 또는 파일의 버전이 지정되지 않은 경우 mv
대신을 사용 git mv
하고 git commit
s를 잊어 버리십시오 .