QA@IT

gitで管理しているファイルをFTPソフトで上書きされた場合

4029 PV

Mac OS10.6でgitを使用しています。
レンタルサーバーの非公開領域にリモートレポジトリを設置し、ローカルレポジトリからpushした場合、自動的に.git/hooks/post-updateを使用して、www以下の公開領域の特定ディレクトリにpullされる仕組みにしております。

その公開領域のディレクトリに反映されたファイルをFTPでダウンロード・更新・アップロードされた場合、
ローカルレポジトリからpushするとerrorがでるようになりました。

emote: error: Your local changes to the following files would be overwritten by merge:
remote: ファイル名
remote: Please, commit your changes or stash them before you can merge.
remote: Aborting

理由は、公開領域のgitが管理していない変更点があったためと推測しますが、
FTPで上書きされた内容と、ローカルで更新された内容をマージする方法はありますでしょうか?

gitが使えるWEB開発者とgitが使えないクライアントが共有でWEBサイトのバージョン管理をできる環境を模索しているので、
上記のようなケースの対処法を考えております。

どうぞよろしくお願い致します。

回答

自己解決しました。

公開領域にsshで接続して、git commit -a -m "hogehoge"して。変更されたことをcommitします。
そんで、git pull ssh:リモートレポジトリすると、コンフリクトが出たから直せと指示されるので
修正して、git commit。git push。

そして、最後に、ローカルレポジトリでgit pullで最新版をマージすれば、元通りでした。

編集 履歴 (1)
  • 公開領域がどの程度の公開領域かわかりませんが(クライアントが確認するために公開にしてあるのだとは思いますが)、マージ作業中も公開されていることになりますので、上手く行くかは試してませんがrsyncなどで別のディレクトリと同期する形の方が良いかもしれませんね。 -
  • 公開領域はリポジトリとせず、同期する別のディレクトリをリポジトリとして作業します。hook時のpull先も変更が必要ですね。
    同期のタイミングなど考えないといけない事は増えるかもしれませんが、ご参考までに。
    -
  • ありがとうございます。
    おっしゃる通り、公開領域は、クライアントがブラウザで確認するための公開です。
    rsyncは、使ったことないので、なんとも言えないのですが、レポジトリをブラウザからアクセスできる領域に設置するのはセキュリティ上あまり好ましくないでしょうか?gitのセキュリティについては、不勉強なので、もしよろしければご教示頂けると助かります。
    -
  • アクセス設定さえしっかりしておけば問題は無いと思いますが、仮に .git配下が見えてしまった場合、ローカルの設定(config)にはメールアドレスなど見られたくない情報が含まれている場合がありますね。 -
  • 今回のケースで私が公開領域にリポジトリを置かない方がいいかと思ったのは、そこでマージ作業を行っているためです。マージ中の中途半端な状態やマージに失敗しているような状態でアクセスされると外からは壊れた様に見えるかもしれません。そういった状態が許容できるのなら構わないと思いますが、クライアントに心配をかけないようクライアントからの変更の取り込みとその確認は別の環境でできた方がいいのかなと思ったまでです -
  • たしかにマージ途中のコンフリクトが見られてしまうのは問題ですね。見落としていました。
    ご丁寧にいろいろとありがとうございました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。