はじめに
今回WSL上のgitで管理しているプロジェクトを他の方に共有する機会があり、特別なプラットフォームを使用せずに共有する方法をいくつか調べたので備忘録として方法を残します。ぱっと出てきた・思いついたものを書いていますので他にもあるのかも知れませんがとりあえず5つの方法を紹介いたします。
サンプルのフォルダ構造は以下のような構造を想定して書きます。
/home/repos/
└── test_repo/
├── .git/
│ ├── ... (Gitの管理ファイルが多数)
└── sample1.txt
方法一覧
ネットワーク経由でやるなら
- SSH経由でクローンする ★おすすめ
- サーバーを立ててクローンする
ファイルを共有できるなら
ローカルでやるなら
SSH経由でクローン
標準的なGitのワークフローに近く、push も可能で、暗号化通信なので、できたらこれが一番いいと思っています。
SSHの設定についてはあまり深くは触れませんが、サービス開始するまでざっくりとコマンドを提示すると以下の通りです。
sudo apt install openssh-server
sudo service ssh start
クライアントからのアクセス
git clone ssh://<ユーザー名>@localhost:/home/repos/test_repo
ユーザー名はSSH接続するユーザー名です ※ <>は入力不要。
外部からアクセスする場合は localhost 部分をアドレスやホスト名に変更してください。またエイリアスを設定してあれば git clone wsl:/home/repos/test_repo のように簡易化可能です。
WSL上でGitリポジトリ用のサーバーを立ててクローン
git daemon を使用した共有方法で、LAN内の匿名アクセスで、読み取り専用向けです。
実行するとデフォルトでは、9418/TCPで、読み取り専用のリポジトリ配信を行う簡易サーバーを作成します。
以下がコマンドの使用例です。
git daemon --reuseaddr --base-path=/home/reps/ --export-all --verbose
オプションの解説
- reuseaddr
- サーバーは古い接続がタイムアウトするのを待たずに再起動できます
- base-path
- 指定されたパスをクライアントからの参照ルートに指定します
- 今回の場合は
/home/repos/を指定しておりgit:localhost/test_repoの参照先は/home/repos/test_repoと解釈されます
- export-all
- ベースパス(今回だと
~/hoge/)の配下の全てのリポジトリを公開対象にするオプションです -
このオプションがない場合、ディレクトリに
git-daemon-export-okという空のファイル(マジックファイル)が存在するリポジトリのみを配信対象とします - 複数のリポジトリが
/home/reposに存在して、読ませたくないリポジトリがあるならば、このオプションを使用せず、リポジトリ内にマジックファイルを設置してください
- ベースパス(今回だと
- verbose
- ログを詳細表示する
クライアントからのアクセス(Clone)
git clone git://localhost:9418/test_repo
プロトコルは git で、ポート番号は 9418 を使用する場合は省略可能です。
参考情報
push の操作はデフォルトでは無効ですが --enable=receive-pack のオプションを追加することで匿名プッシュが許可できます。(クローズドなLAN設定のみを想定)
https://git.dokyumento.jp/docs/git-daemon
WSLのサービスを外部から利用する際には、Windows側でポートフォワーディングなどさせる必要があるかも知れません。
Git Bundleで移動
ここ以降のコマンドはローカル向けだったり、ファイル共有でクローンするようなコマンドです。
GitBundleではバンドルファイルを作成して、そのファイルを共有することでリポジトリをクローンします。スタンドアローンの端末など、ネットワークにつながっていないような端末に送りつけるときに使えるかも知れません。
# リポジトリ内に移動する必要あり
cd /home/repos/test_repo
# git bundle create <file_name> --all
git bundle create test_repo.bundle --all
# 作成された test_repo.bundle ファイルを頑張って移動する
オプションの解説
- all
- 全てのタブ、ブランチを含める
- ブランチだけなら
--branches - タグだけなら
--tags - 特定のブランチだけなら
...bundle main features/...のようにブランチ名をスペース区切りで指定
- ブランチだけなら
- 全てのタブ、ブランチを含める
作成された file_name.bundleファイルをクローンしたい端末のフォルダに移動して以下のコマンドを実行することでクローン完了
# git clone <file_name>
git clone test_repo.bundle
WSL上からWindowsのパスに移動してクローン
解説することあまりないのでコマンドだけ
cd /mnt/c/path/to/local
git clone /home/repos/test_repo
WSLのパスを使ってWindowsから直接クローン
git clone \\wsl$\Ubuntu\home\repos\test_repo
このコマンドを実行すると fatal: detected dubious ownership in repository at ... のような文とともに To add an exception for this directory, call: git config --global --add safe.directory '...' となることがあるので、この内容が表示された場合は git config --global ... のコマンドを実行した後に再度 clone を行いましょう。
調べていて、WSLのファイルってWindowsからこんな感じでアクセスできるんだ…っていうのを初めて知りました。
おわりに
スタンドアローンの端末にバンドルファイルを送ったり、サクッとプロジェクトをCloneしてもらったりと使用する場面は限られると思いますが、複雑な設定なくリポジトリをクローンするための方法を何パターンか紹介させていただきました。ご参考なれば幸いです。