LoginSignup
17
12

More than 5 years have passed since last update.

Gitのリポジトリ・ルートを親ディレクトリに移す

Posted at

概要

開発中に様々な理由からこれまでの歴史を変更したくなることがあります。今回はその中でも、リポジトリ・ルートを親ディレクトリに移すことを試みます。

例えば、下記のような構造のワーキング・ディレクトリを

public/
├── index.cgi
└── img

下記のように変更するということです

new_root/
└── public
    ├── index.cgi
    └── img

ちなみに、今回の目的とは逆方向、サブディレクトリを新たなルートにする方法はGit Bookに記載されています。

注意
これらリポジトリの歴史を変更する操作は、共用のリモート・リポジトリへまだpushしていない場合に限ります。

方法

リポジトリ・ルートを親ディレクトリにするということは、既存のすべてのファイルを1つのディレクトリに収めるという言い方もできます。すなわち、filter-branchを使って全履歴にわたってリポジトリ・ルートに有るすべてのファイルを1つのディレクトリに移動します。

ここでは、その1つのディレクトリの名前をpublicにしましょう。結果的には下記のようなコマンドになります。

git filter-branch -f --tree-filter '[ -d public ] || mkdir public/; ls -1 --color=never | grep -v public | xargs -i% mv % public/' HEAD

mv-tオプションは、今回はうまく作用しませんでした。そのためxargs-iオプションを指定して引数をはめ込みました。

17
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
12