นี่คือทางออกที่ฉันให้ที่นี่ :
ก่อนอื่นทำการสำรองข้อมูลไดเรกทอรี phd ของคุณให้เสร็จสมบูรณ์: ฉันไม่ต้องการรับผิดชอบต่อการทำงานหนักของคุณ! ;-)
$ cp -r phd phd-backup
ย้ายเนื้อหาของphd/codeไปที่phd/code/codeและแก้ไขประวัติเพื่อให้ดูเหมือนว่ามีอยู่เสมอ (นี่ใช้คำสั่งตัวกรองสาขาของ git ):
$ 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 commits