(断念)BOXにGitリポジトリを作成し、WSLで開発したソースコードをバージョン管理する

TL;DR

ファイル共有手段はBOXのみ(GitHubなどのプラットフォームなし)、Gitでバージョン管理をしたいという状況で、試行錯誤した内容をまとめる。

また、ソースコードはWSL内に配置する想定。

  • 個人開発であれば何とか運用できそう、チーム開発はファイル同期の問題があり不安が残る
  • WSL(Ubuntu)からBOX内のファイルにアクセスすることはできた
  • BOX上にGitリポジトリの作成はできた(git pullgit 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したよ」の声の掛け合いなどがあれば、運用でごまかせそう)

個人で運用するぶんには、ファイルは最新状況が完全に反映されるはずなので、問題ないようにも思われる。