İşte burada verdiğim bir çözüm :
Öncelikle doktora dizininizin tam bir yedeğini alın: Sıkı çalışma yıllarını kaybetmekten sorumlu tutulmak istemiyorum! ;-)
$ cp -r phd phd-backup
İçeriğini taşıma phd/codeiçin phd/code/codeve her zaman (bu kullanımları seyahatseverlerin Git orada olmuştur gibi görünecek biçimde tarihini düzeltmek filtre şube komutu):
$ 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
İçeriğinden aynı phd/figuresve phd/thesis(sadece yerini codeile figuresve thesis).
Şimdi dizin yapınız şöyle görünmelidir:
phd
|_code
| |_.git
| |_code
| |_(your code...)
|_figures
| |_.git
| |_figures
| |_(your figures...)
|_thesis
|_.git
|_thesis
|_(your thesis...)
Ardından kök dizinde bir git deposu oluşturun, her şeyi içine çekin ve eski depoları kaldırın:
$ 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
Son olarak, şimdi istediğiniz şeye sahip olmalısınız:
phd
|_.git
|_code
| |_(your code...)
|_figures
| |_(your figures...)
|_thesis
|_(your thesis...)
Bu prosedürün güzel bir yanı, sürümlendirilmemiş dosyaları ve dizinleri yerinde bırakmasıdır .
Bu yardımcı olur umarım.
Ancak bir uyarı kelimesi var: codeDizininiz zaten bir codealt dizine veya dosyaya sahipse , işler çok yanlış gidebilir ( figuresve thesiselbette aynıdır ). Bu durumda, tüm prosedürü gerçekleştirmeden önce bu dizini veya dosyayı yeniden adlandırın:
$ cd phd/code
$ git mv code code-repository-migration
$ git commit -m "preparing the code directory for migration"
Ve prosedür tamamlandığında, bu son adımı ekleyin:
$ cd phd
$ git mv code/code-repository-migration code/code
$ git commit -m "final step for code directory migration"
Tabii ki, codealt dizin veya dosya sürümlendirilmemişse, s mvyerine kullanın git mvve unutun git commit.