Bitbucket Cloud の使用を開始する
Bitbucket Cloud を初めてお使いですか? 新規ユーザー用のガイドをご利用ください。
通常、コード リポジトリには複数のディレクトリがあります。プロジェクトの機能をリポジトリ内の対応する名前のディレクトリに分割したとします。リポジトリのコードを整理 (またはリファクタリング) する必要がある場合があります。たとえば、既存のプロジェクトのリポジトリのディレクトリを移動して、そのディレクトリのみのリポジトリを用意するようなことがあります。
リファクタリングを行う際には、古いプロジェクトのソース履歴を新しいプロジェクトでも保持することをおすすめします。このページでは、リポジトリを異なるディレクトリに移動すると同時に履歴を保持する方法について説明します。
ディレクトリを分割する前に、新しいプロジェクトの名前を決める必要があります。この例では、次のようにリファクタリングを行います。
リポジトリ | 説明 |
---|---|
splitpractice | 演習用に作成された既存の Bitbucket リポジトリ。 |
bigdir | 分割を行う splitpractice のディレクトリ。 |
freshrepo | bigdir のコンテンツを保持するための新しいリポジトリ。これは以降の手順を利用して作成します。 |
この例を試すには、Bitbucket Cloud にログインして次の操作を行います。
freshrepo という名前の新しい Git リポジトリを作成します。
リポジトリは自身のアカウントの配下に作成します。
ローカル システムで、コマンドライン ウィンドウを開きます。
splitpractice リポジトリをローカル システムの freshrepo にクローンします。
1
git clone git@bitbucket.org:tutorials/splitpractice.git freshrepo
このコマンドでクローンを行うと、splitpractice リポジトリを含む freshrepo ディレクトリがローカル システムに作成されます。
ディレクトリを freshrepo のルートに切り替えます。
ディレクトリのコンテンツを一覧表示します。
次の内容が表示されます。
1
bigdir lildir lildir2
この時点では、freshrepo は Bitbucket の splitpractice リポジトリにリンクされている Git リポジトリです。
Bitbucket のリモート splitpractice リポジトリへのリンクを削除します。
1
git remote rm origin
freshrepo/.git/config ファイルのコンテンツを一覧表示することで、このコマンドが正しく実行されたかどうかを確認できます。
bigdir ディレクトリに含まれないすべてのデータをリポジトリから削除します。
1
git filter-branch --index-filter 'git rm --cached -r lildir lildir2' -- --all
このコマンドは履歴とファイルを確認し、bigdir に存在しないデータを削除します。
ローカルの freshrepo ディレクトリを Bitbucket の freshrepo リモート リポジトリにリンクします。
1
git remote add origin https://tutorials@bitbucket.org/tutorials/freshrepo.git
追加する URL は、Bitbucket のリポジトリのクローン オプションから取得できます。この例では HTTPS を使用していますが、SSH を使用することもできます。
新しくリファクタリングされたリポジトリを Bitbucket にプッシュします。
1
git push origin main
Bitbucket で freshrepo リポジトリを確認します。ソース ファイルおよびそれらの履歴には、bigdir ディレクトリのアクティビティのみが含まれることがわかります。履歴は "lil" ディレクトリに対するもののみです。これを確認するには、splitpractice の元のコミットを freshrepo リポジトリと比較します。なお、ソース ファイル 1 の履歴は移動後も保持されています。
新しい freshrepo/bigdir は、元の splitpractice/bigdir ディレクトリとは完全に独立しています。本番環境でリポジトリを分割していた場合、splitpractice から splitptractice/bigdir フォルダを削除する必要がある場合があります。
この内容はお役に立ちましたか?