0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSLのgitリポジトリをプラットフォームを使用せずに共有する5つの方法

0
Posted at

はじめに

今回WSL上のgitで管理しているプロジェクトを他の方に共有する機会があり、特別なプラットフォームを使用せずに共有する方法をいくつか調べたので備忘録として方法を残します。ぱっと出てきた・思いついたものを書いていますので他にもあるのかも知れませんがとりあえず5つの方法を紹介いたします。

サンプルのフォルダ構造は以下のような構造を想定して書きます。

/home/repos/
└── test_repo/
    ├── .git/
    │   ├── ... (Gitの管理ファイルが多数)
    └── sample1.txt

方法一覧

ネットワーク経由でやるなら

ファイルを共有できるなら

ローカルでやるなら

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してもらったりと使用する場面は限られると思いますが、複雑な設定なくリポジトリをクローンするための方法を何パターンか紹介させていただきました。ご参考なれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?