ホストAからホストBにgitignoredファイルをコピーする(rsync?)

ホストAからホストBにgitignoredファイルをコピーする(rsync?)

機密情報を含む複数のファイルがgitignoredされるgitリポジトリがあります。これらのファイルは、異なる深さの異なるサブディレクトリにあります。

所有者これらの文書はすべて正しい場所にあります。ストレージをホストシステムに複製しました。第二、ホストからgitignoredファイルをコピーする良い方法を探しています。

SSH経由で接続できます。到着第二、rsyncを使用してこれを行う方法があるかどうか疑問に思いますが、私が見つけたすべての例はその逆を説明します。すべてを同期します。とは別にgitignored ファイル。

答え1

gitプロジェクトディレクトリで使用すると、git check-ignore **/*gitはすべてのファイルを無視します。

gitコマンドの出力をファイルに送信し、コマンド--files-fromのオプションを使用する必要がありますrsync。たとえば、

git check-ignore **/* > ignoredFiles
rsync -a --files-from=./ignoredFiles . host:/path/to/ignoredFiles

ポイントを指定する必要があります.rsync無視されたファイルファイル)、ソースディレクトリを表すので、gitプロジェクトのルートディレクトリになります。


このコマンドはgit check-ignore **/*私にのみ動作しますzsh(bashではなぜ動作しないのかわかりません)。ただし、このコマンドを使用すると隠しファイルには機能しないため、隠しファイルも除外するには次のようにします。

find . -exec git check-ignore {} + > ignoredFiles
rsync -a --files-from=./ignoredFiles . host:/path/to/ignoredFiles

無視されたファイルをいくつかのファイルにリダイレクトし、 --files-from を使用して読み込むのは安全です。空白のあるファイル名は正しくコピーされるためです(ただし、他の特殊ファイル名についてはわかりません)。

答え2

最終的にはrsyncを使用し、すべてのgitignoredファイルを列挙するのではなく、ディレクトリ全体(.git /を除く)を同期し、それを使用して--ignore-existingターゲットにすでに存在するファイルを同期させませんでした。

rsync -avz --no-links --ignore-existing --exclude='.git/' \
    ~/example/repo user@host:example

また、rsyncオプションは呼び出しをテストし、私が目的のファイルを同期していることを確認するのに--dry-run非常に便利です。-vvrsync

rsync --dry-run -avvz ...

関連情報