2012/05/11: git-ftp.pyを使ってGitで管理しているFTP経由でローカルとリモートのファイルを同期
既にリモートサーバー上に配置されたプロジェクトを、今後Gitでバージョン管理していきたい場合、どうするのが一番いいのでしょうか?
こちらに書いたTransmitのディスク機能を使って、リモート側にリポジトリを作って・・・というやり方だと、addしたときに下記のようなエラーが出てうまく行きませんでした。
GitのドキュメントにはFTP経由でもいけそうに書いてあるのですが、マウント以外の方法でも自分が試した限りでは駄目でした。cloneなどはいいけど、書込み系のコマンドは駄目なのかもしれません。よくわかりませんが。
個人的にはこれだというところまでは行っていませんが、備忘録がてらひとつの方法の手順をまとめておきます。
git-ftp.pyを使って同期させる方法です。
上記GithubのサイトからソースコードをDLして、フォルダ毎ローカルのどこかに配置します(ZipでDLした人は、「git-ftp」にリネームしておくと良いでしょう)。
git-ftp.pyを実行可能にします。
リモートにあるファイルをローカルにDLして、プロジェクトディレクトリにリポジトリを作成します。
作成されたリポジトリ内に2つのファイルを追加します。
.git/ftpdata
.git/hooks/post-commit
post-commitを実行可能にします。
ここまでの設定を済ませておけば、あとはgit commit を実行した時に、post-commitがgit-ftp.pyを叩き、変更箇所をリモート側に反映してくれます。とりあえず、FTPでしか繋げないリモートのプロジェクトファイルをGitで管理できるようになりました。が、準備がちょっと面倒くさい、もっといい方法ないのだろうか...。
参考:
[Git]git で push したファイルを FTP 経由で差分アップロードするよ
こちらに書いたTransmitのディスク機能を使って、リモート側にリポジトリを作って・・・というやり方だと、addしたときに下記のようなエラーが出てうまく行きませんでした。
error: file write error (Input/output error)
fatal: unable to write sha1 file
GitのドキュメントにはFTP経由でもいけそうに書いてあるのですが、マウント以外の方法でも自分が試した限りでは駄目でした。cloneなどはいいけど、書込み系のコマンドは駄目なのかもしれません。よくわかりませんが。
個人的にはこれだというところまでは行っていませんが、備忘録がてらひとつの方法の手順をまとめておきます。
git-ftp.pyを使って同期させる方法です。
上記GithubのサイトからソースコードをDLして、フォルダ毎ローカルのどこかに配置します(ZipでDLした人は、「git-ftp」にリネームしておくと良いでしょう)。
git-ftp.pyを実行可能にします。
chmod +x /path/to/git-ftp/git-ftp.py
リモートにあるファイルをローカルにDLして、プロジェクトディレクトリにリポジトリを作成します。
cd /pa/th/to/project
git init
作成されたリポジトリ内に2つのファイルを追加します。
.git/ftpdata
[master]
username=ユーザー名
password=パスワード
hostname=FTPアドレス
remotepath=リモート上のプロジェクトディレクトリへのパス
ssl=no
.git/hooks/post-commit
#!/bin/sh
/path/to/git-ftp/git-ftp.py
post-commitを実行可能にします。
chmod +x /pa/th/to/project/.git/hooks/post-commit
ここまでの設定を済ませておけば、あとはgit commit を実行した時に、post-commitがgit-ftp.pyを叩き、変更箇所をリモート側に反映してくれます。とりあえず、FTPでしか繋げないリモートのプロジェクトファイルをGitで管理できるようになりました。が、準備がちょっと面倒くさい、もっといい方法ないのだろうか...。
参考:
[Git]git で push したファイルを FTP 経由で差分アップロードするよ
2012/05/11: リモートでもCompassを使いたい!
Sassとても便利ですね。Compassをインストールして、watchを走らせておけばローカルファイルを監視して変更があれば瞬時にコンパイルしてくれるので、もう通常のCSSなんて使いたくないと思うほどです・・・。
ただ、ローカルで作業している場合はいいのですが、ひとつ問題だったのがリモートホスト上にあるファイルをwatchすることができない点。案件ごとに変わるリモートのサーバーに毎回環境を整備するのは非常に面倒です(sshでログインすることすら面倒だし・・・)。ローカルのマシンにインストールしているCompassで、なんとかリモートのファイルを監視できないのか、色々調べてみました。
最初に見つかったのが、sshfsを使ってサーバーをローカルマシンにマウントする方法。依存関係やコマンドラインからの実行で多少面倒ではある物の、これを使えばマウントしたディレクトリをローカルのCompassでwatchできました。
→ sshでリモートサーバーをマウント、便利にsshfs / Unix的なアレ
素晴らしい!・・・と思ったのですが、10分も繋げているといきなり接続が切れたりして非常に不安定で、実用レベルには達しませんでした(Macへの移植の過程で何か問題が発生したのかな?)。sshfs関係はいくつかGUIアプリも出ていたのですが、どれも結局同じ不具合があり、開発が止まっているプロジェクトとかもあって、なんだか不安な感じでした。
あー、駄目なのかなぁ。と諦めかけた時、Transmitをいじっているとふと、「お気に入り>ディスクとしてマウント」というメニューがあることに気付きました。要は、上記のsshfsと同じようにリモートをマウントする機能なので、同じことができました。そして接続が切れません!素晴らしい。しかも、sshは不要でftpでログインできていればOK。ツールバーに常駐しているTransmitアイコンからも直接ディスクにマウント機能が使えます。この「ディスク機能」は、今回の件以外でもかなり役に立ちそうです。ありがたい!

Thank you, Transmit !!
ただ、ローカルで作業している場合はいいのですが、ひとつ問題だったのがリモートホスト上にあるファイルをwatchすることができない点。案件ごとに変わるリモートのサーバーに毎回環境を整備するのは非常に面倒です(sshでログインすることすら面倒だし・・・)。ローカルのマシンにインストールしているCompassで、なんとかリモートのファイルを監視できないのか、色々調べてみました。
最初に見つかったのが、sshfsを使ってサーバーをローカルマシンにマウントする方法。依存関係やコマンドラインからの実行で多少面倒ではある物の、これを使えばマウントしたディレクトリをローカルのCompassでwatchできました。
→ sshでリモートサーバーをマウント、便利にsshfs / Unix的なアレ
素晴らしい!・・・と思ったのですが、10分も繋げているといきなり接続が切れたりして非常に不安定で、実用レベルには達しませんでした(Macへの移植の過程で何か問題が発生したのかな?)。sshfs関係はいくつかGUIアプリも出ていたのですが、どれも結局同じ不具合があり、開発が止まっているプロジェクトとかもあって、なんだか不安な感じでした。
あー、駄目なのかなぁ。と諦めかけた時、Transmitをいじっているとふと、「お気に入り>ディスクとしてマウント」というメニューがあることに気付きました。要は、上記のsshfsと同じようにリモートをマウントする機能なので、同じことができました。そして接続が切れません!素晴らしい。しかも、sshは不要でftpでログインできていればOK。ツールバーに常駐しているTransmitアイコンからも直接ディスクにマウント機能が使えます。この「ディスク機能」は、今回の件以外でもかなり役に立ちそうです。ありがたい!

Thank you, Transmit !!