
会社の方針でGitHubが使えない場合なんかも、ローカルでバージョン管理する方法がある。
開発環境をMac、
本番環境をLinux(ubuntu)、
リポジトリ(バージョン管理ファイルをおく場所)をSMBのファイルサーバーという前提条件で話を進める。
あと、開発環境と本番環境の両方にGitのインストールも完了している前提で進める。
すでにGitHubと紐づけてしまった場合なんかも変更可能。
開発環境(Mac)の設定
Finderでリポジトリを配置するフォルダに接続
まず、SMBでファイルサーバーにFinderから接続する。
デスクトップ画面の何もない場所をクリックしたら、
ファイル > 移動 > サーバへ接続
smb://hogehoge.com
なりsmb://192.168.x.x
なり接続先の情報を入力する。
ユーザー名パスワードも入力し、リポジトリを管理するディレクトリをマウントする。
ターミナルから接続
cd /Volumes/さっきマウントしたフォルダ名
で接続できるはず。
サーバーへ接続 から接続したフォルダは、/Volumes直下にマウントされるのがMacの決まりみたい。
もちろん、その中にサブディレクトリを作成しても良い。
リモートリポジトリを登録
とにかくリポジトリを置きたいフォルダまでcd
コマンドで移動したら、
git init --bare /Volumes/リポジトリを置きたいパス
を叩く。
そして、開発しているアプリケーションのプロジェクトディレクトリにcd
コマンドで移動する。
で、git remote set-url origin /Volumes/リポジトリを置きたいパス
を叩く。
リモートリポジトリって名前だけどローカルにあってGitHubに上がるわけじゃないから安心して。
リポジトリにプッシュ
同じく
git push -u origin main
でpushする。
main
の部分は自分の使っているブランチ名に合わせてくれ。
PCを起動してから一度Finderでフォルダを開きてあげないとそとそも通信できなかった。
あとはリモートリポジトリがVPN先にあるときなんかも1回ファインダーで開いてあげないとあかん。
git init --bareの処理をちゃんとしてないとプッシュした時に下記のエラーが出る。
Enumerating objects: 6848, done.
Counting objects: 100% (6848/6848), done.
Delta compression using up to 10 threads
Compressing objects: 100% (3449/3449), done.
Writing objects: 100% (6848/6848), 6.97 MiB | 460.00 KiB/s, done.
Total 6848 (delta 3982), reused 5532 (delta 2986), pack-reused 0
remote: Resolving deltas: 100% (3982/3982), done.
remote: error: refusing to update checked out branch: refs/heads/main
remote: error: By default, updating the current branch in a non-bare repository
remote: is denied, because it will make the index and work tree inconsistent
remote: with what you pushed, and will require 'git reset --hard' to match
remote: the work tree to HEAD.
remote:
remote: You can set the 'receive.denyCurrentBranch' configuration variable
remote: to 'ignore' or 'warn' in the remote repository to allow pushing into
remote: its current branch; however, this is not recommended unless you
remote: arranged to update its work tree to match what you pushed in some
remote: other way.
remote:
remote: To squelch this message and still keep the default behaviour, set
remote: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
本番環境 (Linux) の設定
UbuntuなどのLinux環境では、SMB共有への接続はcifs-utils
パッケージを使用して行う。
cifs-utils のインストール
sudo apt update && sudo apt install cifs-utils
俺は元から入ってた。
SMB共有のマウント
sudo mkdir /mnt/repo
sudo mount -t cifs //サーバーのアドレス/リポジトリを置くディレクトリ /mnt/repo -o username=SMB接続ユーザー名,password=’SMB接続パスワード’
-bash: hoge!fuga: event not found
のようなエラーがでることがある。これはパスワードに!
などの記号が含まれていると起こりがち。
だからpassword='SMB接続パスワード'
みたいに’’
で囲んであげれば大丈夫。
Git リモートURLの設定
マウントが完了したら、git remote set-url
コマンドを使用してリモートURLを設定。
git remote set-url origin /mnt/repo
リポジトリからプル
git pull origin main
これで、GitHubを使用せずにローカル環境と本番環境でバージョン管理が行えるようになる。もちろん、プロジェクトの要件に応じて、リモートリポジトリの設定やブランチの管理方法を変更することも可能だ。
GitHubを使うときみたいにトークンは必要ない。
smbを永続的にマウントする
サーバーを再起動するとSMBの接続が解かれてしまうので、今後のためにマウントしよう。
root権限で
/root/.credentials/smblogin_credentials
を作成して接続情報を記載
username=SMB接続ユーザー名
password=SMB接続パスワード
(ファイル名は自由)
!マークとか特殊記号があっても気にしなくていい。
別にクオーテーションで囲まなくていい
/etc/fstab
ファイルを編集し、以下のエントリを追加
//サーバーのアドレス/リポジトリを置くディレクトリ /mnt/repo cifs credentials=/root/.credentials/**smblogin_credentials**,uid=0,gid=0,vers=3.0 0 0
sudo mount -a
コマンドを実行して、エントリが正しく機能することを確認
reboot
しても接続が維持されるはず。
気になったこと
リポジトリをおくファイルサーバーに何かインストールする必要はある?
ない。
データを置く場所を提供するだけでいい。
すでにGitHubのリポジトリがセットされていても変更される?
される。新しいリポジトリに変わる。
git remote -v
で見てみたらわかる。
Dockerを使っているがDocker Hubからライブラリが落とせなくなったりしない?
別に大丈夫。
あくまでリポジトリの保存先が変わるだけなので、影響はなかった。
GitHubみたいにトークンいらんの?
いらん。
VPN接続での運用は可能?
リモートリポジトリと本番環境が同じネットワークにあり、そこに開発環境からVPNで接続する運用を俺はやってる