機能 ショートカットキー
リファレンス(参考URL)一覧へ移動 R
記事URLをMarkDownとしてコピー Ctrl+M
前のコードタグへ移動 Ctrl+←
次のコードタグへ移動 Ctrl+→
ヘルプを表示・非表示 H
Tips
- ショートカットキーは記事上で有効です。ヘッダー/フッター付近では機能しないことがあります。
- コードタグ移動機能がうまく動かないときは、Shift+F5でページを更新してみてください。
- このウィンドウを閉じるには、Hキーをもう一度押してください

Git gulp expect cron Atomでリモートサーバー同士でファイル同期をする

AD

プログラミング

リモートマシン上のテキストやファイルを、ホストPCにコピペするのが面倒だったので、
Git gulp expect cron Atomを使ってファイル同期できるようなシステムを考えてみました。

ファイルが更新されるたびに自動でgit pushする

プログラミング

/mnt/c/pg/expect/git_push

#!/usr/bin/expect

# C:\pg\expect\rsync_ssh

# log_file /var/log/expect.log

set USER "yuis-ice"
set PW "YOUROWN"
set Prompt "\[#$%>\]"

set timeout 5

puts [exec git add -A ;]
puts [exec git commit -m '.' ;]

spawn git push -u origin master

expect {
    -glob "Username" {
        send -- "${USER}\n"
        exp_continue
    }
    -glob "Password" {
        send -- "${PW}\n"
    }
}

expect {
    -glob "${Prompt}" {
        interact
        exit 0
    }
}

共有したいディレクトリで、まずはgit remote addまでを済ましましょう。

次に、gulpの設定です。

npm install -D gulp
npm init -y
npm install child_process

gulpfile.js

var gulp = require("gulp");
var ps = require('child_process').exec;

gulp.task('exec_file', function() {
  var command = "/mnt/c/pg/expect/git_push";
  ps(command , function (err, stdout, stderr) {
    console.log(stdout);
  });
});

gulp.task("watch", function() {
  var targets = [
    './**'
  ];
  gulp.watch(targets, ['exec_file']);
});

cronでgit pullを定期的に実行

プログラミング

最初にcloneしておきましょう。

clone github.com/repo.git

こういう感じのスクリプトをcronに登録しておきます。

cd repo.git
git pull

これでファイルの同期ができるようになりました。

Atomだとファイルの更新があればすぐにファイルを最新のものにしてくれますので、pullすると勝手にファイルをpullしたものに置き換えてくれますので便利です。

pullしたファイルを編集できるようにする

プログラミング

pullしたファイルを編集したりすると、こういうエラーがでるようになります。
解決策として…

error: Your local changes to the following files would be overwritten by merge:
        README.md
Please, commit your changes or stash them before you can merge.

読み取り専用、として利用するのが良いと思いますが、もし書き換えてそれをcommitしたいとかがあれば、書き換えてしまいましょう。
そうすると先程のエラーがでて、同期がストップします。

そして、commitをすればいいわけです。

もし書き換えてしまったのが間違いだった場合、次のコマンドでローカルのリポジトリの変更を破棄することができます。

git reset --hard

[get_title https://stackoverflow.com/questions/15745045/how-do-i-resolve-git-saying-commit-your-changes-or-stash-them-before-you-can-me]

SPONSOR

オンラインブートキャンプ全12コースの「ウケ放題」 AD

コメントを残す

Close Menu