ブログに書きたいネタとか雑多なメモを管理する際、Git によるバージョン管理と、クラウドストレージによる同期を併用したくなる。
具体的には、こんなことがしたい:
プライベートのリモートリポジトリ代わりに、ベアリポジトリを OneDrive に共有する話は見たことある (これ とか これ) のだが、私がやりたいこととはちょっと違うんだよな。
そもそも、 Microsoft 買収後に GitHub で無制限にプライベートリポジトリ作れるようになったので、 Git リポジトリの共有自体は GitHub とかで良いので。
以前、ローカルリポジトリをまるごと OneDrive で共有させてみたのだが、複数の端末で編集すると同期の競合が発生しまくってしまった。
特に .\.git
ディレクトリ内でコンフリクトすると後処理が面倒くさすぎる。
どうにかならんもんか。
.\.git
ディレクトリだけ同期除外先に答えを言ってしまうと、クラウドストレージでの同期で特定のディレクトリの同期を除外させれば良い。
.\.git
ディレクトリ内のコンフリクトが面倒なら、 .\.git
ディレクトリだけ同期を除外させればいじゃない… という精神だ。
ただ、 OneDrive では一筋縄ではいかなかったので、少々トリッキーな方法を採っている。
そのやり方を、 Windows 上の OneDrive を例に紹介する。
既に OneDrive で管理しているフォルダを、 Git 管理させる方法。
.\.git
フォルダを手動で新規作成する.\.git
フォルダーを同期の対象外にする.\.git
フォルダが消えるgit init
する
.\.git
隠しフォルダが再作成されるこの結果、 Git のリポジトリやステージングのデータを除く、ワーキングツリーのファイルだけをクラウドストレージで同期できる。
難点なのが、 OneDrive 上で「同期の問題」として以下のエラーが出続けることだ。
この名前のファイルまたはフォルダーが、同じ場所にあります。
両方のバージョンを残すには、この PCまたはオンラインのどちらかでこのアイテムの名前を変更してください。両方のアイテムが同じ場合は、この PCにあるバージョンを削除するとオンラインのバージョンをダウンロードできます。
なお、エラーが出ていても同期はされる。
上記と同様、 OneDrive でワーキングツリーを同期させつつ、 .\.git
ディレクトリは同期させないフォルダを、別のマシンに構築する方法。
.\.git
フォルダーを同期の対象外にする
.\.git
フォルダが存在しているはず.\.git
フォルダが消えるclone の替わりに fetch と reset を使い、ワーキングツリーはそのままリポジトリだけ更新する
$ git init
$ git remote add origin [email protected]:username/reponame.git
$ git fetch origin master
$ git reset origin/master
同期を再開させる
片方で push した後もう一方で pull しようとしても、先に OneDrive の同期によってワーキングツリーのファイルが更新されてしまっているので、 pull がエラーになってしまう。
こればかりはどうしようもないので、2つ目の端末のセットアップと同様、以下のように ワークツリーを維持したまま、 リポジトリとステージングを (--mixed
オプション相当で) リセットしてやれば良い。
$ git fetch origin master
$ git reset origin/master
こんな感じで、期待していた環境が整った。
Android からは Jota+ あたりを使って OneDrive 上のファイルを直接更新したりしながら活用している。
ちなみに、グループポリシーやレジストリをいじることで、「特定の種類のファイルをアップロードから除外」する事ができる (OneDrive ポリシーを使用して同期設定を制御する - SharePoint in Microsoft 365 | Microsoft Learn)。
が、残念ながらフォルダに対してはこの機能が働かないので、上記の用途を満たさない。
参考までに、やり方だけ下記に示しておく。
HKLM\SOFTWARE\Policies\Microsoft\OneDrive\
の下に EnableODIgnoreListFromGPO
というキーを作るC:\Users\N2633\AppData\Local\Microsoft\OneDrive\<ビルド番号>\adm\
内の以下のファイルをコピーする
.\OneDrive.admx
を C:\Windows\PolicyDefinitions\
へ.\ja\OneDrive.adml
を C:\Windows\PolicyDefinitions\ja-JP\
へgpedit.msc
を入力し「ローカル グループ ポリシー エディター」を立ち上げるCrieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント