ここに私がここに与えた解決策があります:
最初にphdディレクトリの完全なバックアップを作成します。長年のハードワークの損失に対して責任を負うことはしたくないです!;-)
$ cp -r phd phd-backup
のコンテンツをphd/code
に移動しphd/code/code
、履歴が常にそこにあるように修正します(これはgitのfilter-branchコマンドを使用します):
$ 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...)
この手順の良い面の1つは、バージョン管理されていないファイルとディレクトリがそのまま残ることです。
お役に立てれば。
警告の1ワードだけしかし:あなたの場合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 を忘れてください。