投稿日: 2022年11月18日 18:00 JST
更新日: 2023年01月03日 17:00 JST
複数のPCで更新を行なっているとGitHubの有難さを痛感するのですが、GitHub Pagesは基本パブリックリポジトリが対象なので、一部だけプライベートにしたいということができません。
例えば、草稿用のフォルダ_drafts/
だけを非公開にして、ファイル同期したいということは普通はできません。
こういう場合、_drafts/
だけ別にGitHub上でプライベートリポジトリとして登録して、ローカルで入れ子にすることで実現できます。
gitの入れ子管理
手順
まず、既にサイトを公開していることを前提に説明します。
- 最初にローカルの
_drafts/
をバックアップします。 - ローカルから
_drafts/
を管理対象外にします。 - この状態で一旦GitHubにプッシュします。
- GitHub上でプライベートリポジトリを作成します。
- バックアップしておいた
_drafts/
を元に戻す。 _drafts/
内でgitの初期化をして、新たな管理下とする。- フォルダ配下のファイルを全て追加してコミットする。
- 先ほどGitHub上に作成したプライベートリポジトリにプッシュで完了。
# 【重要】ローカルリポジトリ内の_draftsフォルダをバックアップしてください
mkdir ~/backup
cp _drafts/ ~/backup/
# 現在のローカルリポジトリから_draftsフォルダを管理対象外にして、GitHubにプッシュ
git rm -r _drafts
git commit -m "deleted" # コメントは適当に
git push
# GitHub側でPrivateリポジトリを作成
# バックアップした_draftsフォルダをもどす
cp ~/backup/_drafts/ .
# 新たに_draftsフォルダ内で管理を初期化
cd _drafts
git init
# フォルダ配下のファイルを全て追加しコミット
git add .
git commit -m "first" # コメントは適当に
git branch -M main
# GitHubに作成したPrivateリポジトリにプッシュ
git remote add origin https://github.com/ユーザー名/Privateリポジトリ名
git push -u origin main
Visual Studio Codeで開き直して見るとこんな感じになります。
ちょっと見づらいですが、右側サイドバーに管理メニューが2つ並んでいるのが分かります。
Visual Studio Codeでは、エクスプローラーで管理下のフォルダ内にある.git/
フォルダを自動的に検出して、管理メニューに並べてくれます。
クローン
他のPCでクローンする場合は、以下のような感じでそれぞれのフォルダを作成する様な形でクローンします。
git clone https://github.com/ユーザー名/Publicリポジトリ名 site_src
cd site_src
git clone https://github.com/ユーザー名/Privateリポジトリ名 _drafts
Visual Studio Code上ではクローンする際フォルダ名を変更することができない(?)ようなので、コマンドラインから行なった方が良さげ。
注意
このままだと、jekyllが.git/
を読み込んでしまうのでエラーを吐いてしまうので、_config.yml
に除外設定を追加する必要があります。
exclude:
- .git/ # 除外設定にこれを追加
応用
今回は一部をプライベートにする例を示しましたが、もちろん逆のこともできます。
例えば、非公開の開発プロジェクトで、一部のモジュールだけをオープンにして開発したいということもできます。