カテゴリ: Git
投稿者: terada
既にリモートサーバー上に配置されたプロジェクトを、今後Gitでバージョン管理していきたい場合、どうするのが一番いいのでしょうか?
こちらに書いた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 経由で差分アップロードするよ
カテゴリ: Git
投稿者: terada
完全に自分用の備忘録です。ちょこちょこ更新しそうです。

参考: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