質問: はじめまして。 初めてこちらで質問をさせてもらいます。 SourceTreeを使い、直接エックスサーバーに接続し、リモートレポジトリにアクセスする方法について詳解する記事をネットにて検索しましたが、現在はなさそうに見えます。 そのため、私がいろいろと試行をしたのですが、正しい設定や操作方法がわからないでいます。 ご存じの方がお見えでしたら、ご教授いただけますと幸いです。 ### 前提・実現したいこと http://vdeep.net/git-push-deploy では、エックスサーバーにてGitの環境を構築し、リモートリポジトリに手元のmac OSのパソコンからコマンド入力でgit pushする方法は載っています。 今回、コマンドではなくSourceTreeを使い、本番環境での自動デプロイまで実現したいと考えます。 ### 試したこと ●エックスサーバーにGitを導入する手順 http://vdeep.net/xserver-git は、Gitの初期設定まで行いました。 Gitの初期設定は、自分の名前とメールアドレスを設定しました。 ●本番環境での自動デプロイ先 /home/サーバーID/hoge.com/public_html/test とします。 ●リモートリポジトリの場所 /home/サーバーID/hoge.com/public_html/git とします。 理由は、SourceTreeからhttpsにてリモートリポジトリにアクセスしたいためです。 ●public_html/testで公開しているファイルをGitで管理の実行内容 ``` $ cd ~/home.com/public_html/test $ git init $ git add . $ git commit -m "first commit" # On branch master # # Initial commit # nothing to commit (create/copy files and use "git add" to track) ``` ●リモートリポジトリを作成 ``` $ cd ~/hoge.com/public_html/git $ git clone --bare --shared ~/hoge.com/public_html/test test.git warning: You appear to have cloned an empty repository. done. ``` ●post-receiveの作成 ``` $ cd test.git/hooks $ vi post-receive ``` ●ファイルの内容 ``` #!/bin/bash cd ~/hoge.com/public_html/test git --git-dir=.git pull ~/hoge.com/public_html/git/test.git master ``` ●ファイルの実行権付与 ``` $ chmod +x post-receive ``` ●SourceTreeのローカルレポジトリの設定 ・ローカルレポジトリを開いている状態で、「設定」アイコンをクリック。 ・「リモート」アイコンをクリックし、「追加」ボタンをクリック。 ・リモートレポジトリの設定 リモートの名称:master URL/パス:https://hoge.com/git/test.git を入力して、「OK」をクリック。 ・リモートリポジトリのパスに追加した項目を反転している状態で、「OK」をクリック。 ### 発生している問題・エラーメッセージ 上記の設定まで行った後、次のプッシュ操作をします。 ●操作内容 ・「プッシュ」アイコンをクリック。 ・プッシュ先の選択画面にて以下を設定。 プッシュ先のリポジトリを「master」 ローカルブランチ「master」、リモートブランチ「master」となっている項目のチェックをつける。 ・「OK」ボタンをクリック。 その後、リモートレポジトリにプッシュするとき、下記のエラーが出ます。 ``` git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags --set-upstream master refs/heads/master:refs/heads/master Pushing to https://hoge.com/git/test.git fatal: https://hoge.com/git/test.git/info/refs not valid: is this a git repository? Completed with errors, see above ``` ### なぜHTTPSアクセスで公開サイト上にgitを作る手段を考えたか 環境設定で、アカウント作成があります。 ホストの設定では、Bitbucket、Bitbucket Server、GitHubの3つの項目しかありません。 いずれのホストもアカウントを作らないといけません。 アカウントを作らないでエックスサーバーにgit pushする場合、上述した試行方法でやるしかないかなと至りました。 ### 補足情報(言語/FW/ツール等のバージョンなど) SourceTreeのバージョン:2.5 mac OS: Sierra です。
回答: こんにちは。 お役に立てるかわかりませんが、思いつく点を書いてみます。 > > アカウントを作らないでエックスサーバーにgit pushする場合、上述した試行方法でやるしかないかなと至りました。 > > > エックスサーバー上に作られているリポジトリに、http(s)プロトコルを使ってpush / pullするためには、Webサーバ側の設定でGit連携が必要になるかと思います。 エックスサーバーについては詳しくないのですが、Webサーバが起動して ~/hoge.com/public_html/以下がブラウザでアクセスできるとしても、git-http-backend やWebDAVなどの設定での連携をしてあげないと、http(s) での git pushはできないと思います。 ひとまず、ローカルの変更をエックスサーバー側に反映させるためには、リモートリポジトリを https://hoge.com/git/test.git とするのではなくて、sshプロトコルでpushすることで可能と思います。 リモートリポジトリを以下のように設定するのではどうでしょう。 * 名前: origin * パス: ssh://アカウント名@アカウント名.hoge.com/home/アカウント名/git/test.git ssh経由でのpushになりますが、結果的に * MacからSourceTreeで sshプロトコルを使ってエックスサーバ上の ~/hoge.com/public_html/git/test.git にpush * エックスサーバ上の ~/hoge.com/public_html/git/test.git に変更が加わりpost-receiveの処理が走る * post-receiveの処理で、~/hoge.com/public_html/test に ~/hoge.com/public_html/git/test.gitにpushされた変更が同期する * 結果的に、Web上のコンテンツがデプロイされる という流れになると思いますが、如何でしょうか。 こちらの記事が近いと思います。 さくらレンタルサーバーとSourceTreeでGit環境構築 わかりにくい点があればご指摘くださいませ。