gitの入れ子管理

複数のPCで更新を行なっているとGitHubの有難さを痛感するのですが、GitHub Pagesは基本パブリックリポジトリが対象なので、一部だけプライベートにしたいということができません。
例えば、草稿用のフォルダ_drafts/だけを非公開にして、ファイル同期したいということは普通はできません。

こういう場合、_drafts/だけ別にGitHub上でプライベートリポジトリとして登録して、ローカルで入れ子にすることで実現できます。

gitの入れ子管理

手順

まず、既にサイトを公開していることを前提に説明します。

  1. 最初にローカルの_drafts/をバックアップします。
  2. ローカルから_drafts/を管理対象外にします。
  3. この状態で一旦GitHubにプッシュします。
  4. GitHub上でプライベートリポジトリを作成します。
  5. バックアップしておいた_drafts/を元に戻す。
  6. _drafts/内でgitの初期化をして、新たな管理下とする。
  7. フォルダ配下のファイルを全て追加してコミットする。
  8. 先ほど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/フォルダを自動的に検出して、管理メニューに並べてくれます。

Visual Studio Code画面

クローン

他の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/   # 除外設定にこれを追加

応用

今回は一部をプライベートにする例を示しましたが、もちろん逆のこともできます。
例えば、非公開の開発プロジェクトで、一部のモジュールだけをオープンにして開発したいということもできます。


Previous Post
jekyllの変数のデータ構造

Share

最近の投稿

gitの入れ子管理
gitの入れ子管理

gitのリポジトリは入れ子にして管理できます。

jekyllの変数のデータ構造
jekyllの変数のデータ構造

jekyllの変数のデータ構造を紹介します

jekyllのカスタマイズ(その他)
jekyllのカスタマイズ(その他)

その他の設定を紹介します