TL;DR
ファイル共有手段はBOXのみ(GitHubなどのプラットフォームなし)、Gitでバージョン管理をしたいという状況で、試行錯誤した内容をまとめる。
また、ソースコードはWSL内に配置する想定。
- 個人開発であれば何とか運用できそう、チーム開発はファイル同期の問題があり不安が残る
- WSL(Ubuntu)からBOX内のファイルにアクセスすることはできた
- BOX上にGitリポジトリの作成はできた(
git pull
やgit push
も一応できる)
環境
試したこと
WSL(Ubuntu)からBOXへ接続する
wsl起動時にboxが自動マウントされるように設定するを参考にした。
BOXにgitリポジトリを作成する
共有フォルダにリモートリポジトリを作る手順を参考にした。
WSL(Ubuntu)環境からでは、BOX上でgit clone --bare
が実行できなかった。(原因不明だが権限の問題?)
(もしかすると、PowerShellなどWindows環境からならBOX上でgit clone
はできるかもしれない)
そのため、次の手順でBOXにリモートリポジトリを配置した。
1.WSL(Ubuntu)内で、任意のディレクトリでgit init
する(適当に1回git commit
もしておく)
2.WSL(Ubuntu)内の別のディレクトリで、git clone --bare
を実行し、.git/
を生成する(cloneする対象は手順1で作成したローカルリポジトリ)
3.生成した.git/
をBOX上にコピーペーストする
4.手順3でペーストした.git/
に対して、各開発メンバがgit clone
する。以降通常の開発手順と同じ
ローカルキャッシュの最新化
boxではローカルキャッシュが常に最新ではないため、gitのpullするとエラーが出たりする。
1人だけでbox上のgitを使っているならば問題ないが、他人と共有するなら頻繁にエラーが出ることになる。
boxにgitリポジトリを作って運用する
今回、運用を断念した直接の原因はこれで、ローカルキャッシュが常に最新とならない。
git pull
するとき、gitは各メンバのBOXローカルキャッシュを参照すると思われる。
メンバAがgit push
した内容が、メンバBのローカルキャッシュで保持できていないタイミングがある。
参考記事のbatの実行
boxにgitリポジトリを作って運用するで紹介されているbatは
ローカルにキャッシュされているファイルは最新化できるかもしれないが、新たに追加されたファイルは検知・最新化できない可能性がある。(そのため、正しくgit pullできない可能性がある)
見たところ、.git/objects/
配下のファイルはよく新規作成されそうな印象だった。
実際にメンバAがgit push
を実行してみて、メンバBが当該batを実行後にgit pull
してみたところAlready up to update
が出力された。
(後述のように、WSLからはファイルの最新化が遅れていることが原因の可能性もある)
Box Driveの標準機能「Refresh Folder」の実行
Box Driveでは「Refresh Folder」という機能でローカルキャッシュを最新化できる。
この機能で最新化したあとにgit pull
すれば正しく動作するのではと考えたが、「最新化できた」というポップアップが表示された直後にgit pull
しても、Already up to update
が出力されるケースがあった。
(最新化というポップアップが出ても実際にはまだ最新化されていない or Windows側では最新化されていても、WSLでは反映に別途時間がかかっていると思われる)
画像抜粋: Box Drive v2.25 リリースノート (2022年2月)
まとめ
以上のことから、BOXのファイルを最新化する・最新化されていないことを検知する方法を確立できなかった。
そのため、第三者によるファイルの新規作成・更新が入るケース(=チーム開発)でのBOX-Gitリポジトリ運用は難しいと思われる
(Slackで「今pushしたよ」の声の掛け合いなどがあれば、運用でごまかせそう)
個人で運用するぶんには、ファイルは最新状況が完全に反映されるはずなので、問題ないようにも思われる。