web-dev-qa-db-ja.com

バイナリファイルのmsysgitからのrsyncの使用

私はネットワーク上のLinuxボックスにさまざまな方法で接続されている3つのウィンドウボックスを持っています(1つはネットワークに対してローカルで、1つはラップトップでローカルである場合とそうでない場合があり、もう1つは仕事用のデスクトップです)。私は現在gitを使用してボックス間でほとんどのものを同期し(Linuxボックスをサーバーとして使用)、それはチャンピオンのように機能します。

ただし、ボックス間で効率的に同期されるように、MP3コレクション(12ギグ)も追加したいと思います。最初はgitを使用できると思っていましたが、実際にはすべての履歴を必要としないため、rsyncの方が適しているようです。既存のすべての管理スクリプトは(cygwinではなく)git bashの下で実行されるため、git bashから使用できるようにしたいと思います(MINGW32はウィンドウのタイトルバーに表示されるものです)。それをCygwinでダウンロードしてコピーすることはできますか、それともより良い方法がありますか? Linuxボックスで最新バージョンのUbuntu Serverエディションが実行されています。rsyncが正しく動作するようにするには、何かをする必要がありますか?

これはおそらく必要以上に少し難しい方法で行っていると思いますが、コマンドラインスキルを向上させるための練習としても使用しています。助言がありますか?


Cygwin Shellからrsyncを使用できますが、msysgitからは使用できません。 rsync.exeをcygwinのbinフォルダーからmsysgitのbinフォルダーにコピーしようとしましたが、まだ見つかりません。そこにインストールするために必要な他のステップはありますか?ファイルの依存関係の1つが見つからないというエラーを表示する代わりに、ファイルを見つけられないというエラーが発生するのは奇妙です。

25
Will Gant

現在(2017年9月7日)の時点で、Git for Windows SDKを実行する必要がなくても、Git for Windows環境にrsyncサポートを手動で追加するのは非常に簡単です。

私は この投稿 に出会いましたが、すべての選択肢を考えると、それほど簡単なことではないと思いましたが、それは本当に簡単です。必要なのは、 MSYS2パッケージリポジトリ からrsyncパッケージを取得し、rsync.exeファイルをC:\Program Files\Git\usr\binに抽出することだけです。 1つ完了しました。できます。

Rsyncパッケージ(rsync.exe形式)からtar.xzを抽出する際にヘルプが必要な場合は、7Zipなどの圧縮ユーティリティを使用するか、Git for Windows bash環境内で次のように直接実行できます。

cd /c/downloaded_location
tar -xvf rsync.pkg.tar.xz usr/bin/rsync.exe --strip-components=2

これにより、ダウンロードした場所にrsync.exeファイルが表示されます(それに応じてパッケージ名を調整してください)。 Windowsのアクセス許可の問題を考慮して、exeをC:\Program Files\Git\usr\binフォルダーに入れる際に特定のコマンドを実行することはしません。エクスプローラーGUIまたは管理者特権のコマンドラインユーティリティを使用してコピーできます(そうです。ProgramFilesフォルダーに何かをコピーするには、管理者レベルのアクセス許可が必要です)。

Ssh経由のrsyncでPageant認証も使用する場合、ssh-pageantバイナリはGit for Windowsにすでにインストールされており、実行する必要があるのは~/.bashrcまたは~/.bash_profileファイルに少し追加します( ssh-pageantの使用法のセクション および Git for Windows wiki を参照)。特にGit for Windows環境で使用するように変更し、ソケットファイルの欠落を検出して拡張しました。

# ssh-pageant allows use of the PuTTY authentication agent (Pageant)
SSH_PAGEANT="$(command -v ssh-pageant)"
if [ -S "$SSH_AUTH_SOCK" ]; then
  PAGEANT_SOCK=$SSH_AUTH_SOCK
else
  PAGEANT_SOCK=${TEMP:-/tmp}/.ssh-pageant-$USERNAME
fi
if [ -x "$SSH_PAGEANT" ]; then
  eval $("$SSH_PAGEANT" -qra "$PAGEANT_SOCK")
fi
unset SSH_PAGEANT
unset PAGEANT_SOCK

この方法で手動でインストールしても、他のユーティリティがどのように機能するかどうかはわかりませんが、rsyncは問題なく動作するようです。うまくいけば、そのリポジトリが残り、更新され続けるでしょう-公式のMSYS2サイトでホストされているので、そうだと思います。

27
nextgentech

質問が「MSYSにrsyncを使用する」ではないことは知っていますが、これに言及することは適切だと思います。

「MinGW Shell」(以前は「MSYS(Basic System)」として最もよく知られていました)は確かにrsyncを持っています。 Cygwinよりもはるかに小さいため、私はそのシェル/システムをできるだけ頻繁に使用しています。 (私はおそらく、最近ファイルサイズを気にする唯一の人です。)

「Git for Windows」/「Git Bash」は、MinGW/MSYSに基づいており、以前にメーリングリストで言及されているため、rsyncを簡単に追加できます。

PS! MinGWシェルにrsyncがない場合は、「mingw-get install msys-rsync」を実行して追加します。

2016年3月25日更新:

Git for WindowsはMSYS2を使用するようになりました。そして、MSYS2はパッケージをインストールするために「mingw-get」ではなく「pacman」を使用します。残念ながら、「Git for Windows」にはpacmanが含まれていません... 2つのオプションがあります。

  1. Git for Windows SDK(pacmanを含む)をインストールします。
  2. MSYS2内にGitをインストールします。

最後のオプションは私のお気に入りですが、まだ 合理化されていない ので、最初のオプションの方がおそらく簡単です。うまくいけば、それ は修正されるでしょう

PS!私はMSYS2/pacmanをあまり使用していませんが、非常に有望です。

2019年8月7日に更新:

Git for Windows(Git Bash)を使用している場合は、上記の answer で説明されているように、MSYS2パッケージリポジトリからrsyncパッケージを取得することをお勧めします。

7
hansfn

git bashあなたは本当にmsysgitを意味し、別名「git for windows」です。スタートメニューオプションはgit bash、使用した名前を説明します。

まず、あなたはここでオプションとしてgitを却下するのは正しいです。 gitが行うことの1つはうまくいきませんバイナリファイルの処理です-そして、巨大で肥大したリポジトリになってしまいます。さらに、変更を処理しないので、gitのオーバーヘッドを使用するとやりすぎだと感じます。

次に、実際に尋ねている質問は「msysgit/Windowsからrsyncを使用できますか?」簡単な答えは、そのままではありません。 msysgitは、形式と機能の点でWindowsコマンドラインにすぎません。つまり、2つのオプションがあります。Windowsマシンでrsyncを有効にするサードパーティツールをダウンロードする( Stack Overflow:Rsync for Windows )、または単にcygwinを使用します。実際、同じ結果が得られます。どちらがより効果的に機能するかを判断するのは、あなた次第です。

2
Andrew M.

rsyncは、単方向同期に最適です。 cygwinの下でrsyncを実行するか、Windowsの場合は Deltacopy も実行できます。

双方向同期が必要な場合は、 nison を見てください。

クロスプラットフォームのディレクトリ同期ツールには、ほとんどのプラットフォームで実行される syncthing があります。

0
shouldbeq931

価値があるのは、ビンパスにドロップしたときに cwRsync がmsysgitで動作するという同様の問題がありましたが、さまざまなことを試した後、最終的に最新バージョン(2.10.2 )of Git for Windows 問題を修正しました。

0
Nick F