यहाँ एक समाधान मैंने यहाँ दिया है :
पहले अपनी पीएचडी निर्देशिका का पूरा बैकअप लें: मैं नहीं चाहता कि आपकी कड़ी मेहनत के वर्षों को खोने के लिए जिम्मेदार ठहराया जाए! ;-)
$ 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 commitएस के बारे में भूल जाओ ।