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/03/27: Gitでよく使うコマンド
完全に自分用の備忘録です。ちょこちょこ更新しそうです。
参考:Gitリファレンス
前回のcommitメッセージをviで編集。
commitメッセージの間違いに気づいた時に便利。但し、既にpushまでしちゃった場合は、やめたほうがいい。参考元
Githubの自分のリポジトリからクローンするときに、
これはとても面倒です。クローンした後からでも、リモートのURLを編集できるので、下のようにして、SSHのURLに変更すればこの問題を解決できます。
ステージングコマンドのまとめ
stash
前回のコミット後の変更を「stash」という引き出しみたいなところに一時的に取り込む。
コミットするほどではないが、一旦今までの変更をとっておきたい時に使う。あとでいつでも取り出せるようになる。
参考:Gitリファレンス
前回のcommitメッセージをviで編集。
commitメッセージの間違いに気づいた時に便利。但し、既にpushまでしちゃった場合は、やめたほうがいい。参考元
git commit --amend
Githubの自分のリポジトリからクローンするときに、
git clone https://github.com/hoge/moge.gitのように、httpsでクローンしてしまうと、変更を加えてリモートにプッシュしようとしたときに、毎回usernameやpasswardを求められてしまいます。
これはとても面倒です。クローンした後からでも、リモートのURLを編集できるので、下のようにして、SSHのURLに変更すればこの問題を解決できます。
git remote set-url origin git@github.com:hoge/moge.git
ステージングコマンドのまとめ
# 追加ファイルを検知してステージング
git add .
# git rmを用いなかったファイル削除も検知&ステージング
# 新規追加ファイルは検知されない。
git add -u
# 上の2つの合わせ技的なやつ
# ファイルの追加削除、リネーム等を検知&ステージング
git add -A
stash
前回のコミット後の変更を「stash」という引き出しみたいなところに一時的に取り込む。
コミットするほどではないが、一旦今までの変更をとっておきたい時に使う。あとでいつでも取り出せるようになる。
#
# stashにしまう。ソースツリーは前回のコミット時と同期される。
git stash
# しまった変更を元にソースツリーを戻す。
git stash apply