35550
お世話になります。  
GitHubでGitLFSを導入しているリポジトリを管理しています。

GitHubなどではGitLFSに対応していますがこのLFSで管理しているファイルも含めたバックアップがしたいです。
CC BY-SA 3.0
2017-01-28T14:18:27.313
32222
2017-06-14T01:36:40.943
2017-06-14T01:34:20.753
14222
14222
question
git github
GitLFSを使ったリポジトリのバックアップとリストア
自己解答です。

[GitHubの説明](https://help.github.com/articles/duplicating-a-repository/)がありました。

バックアップを取ってリストアをするというだけであれば **GitLFSサーバーを導入する必要もなさそう** です。

  * `git clone --mirror`で保存した`.gitディレクトリ`の中で`git lfs fetch --all`をするとファイルがダウンロード出来ます。
  * `git push --mirror`をしたリストア先に`git lfs push --all`するとファイルをアップロードできます。

これでバックアップとリストアが出来ます。

* * *

pre-pushでバックアップを取るといいかと思うのでとりあえず動いているスクリプトを書いておきます。  
おかしなところがあったらご教示お願いします。修正します。

```

    #!/bin/bash
    
    backup_remote() {
      local backup_path="$1"
      local remote_repo="$2"
    
      if [ ! -e $backup_path ]; then
        echo 'バックアップがないのでダウンロードします'
        git clone --mirror $remote_repo $backup_path
      fi
    
      cd $backup_path
      echo 'バックアップの更新をします'
      git --git-dir=. fetch --all
      git --git-dir=. lfs fetch --all
      cd -
    }
    
    command -v git-lfs >/dev/null 2>&1 || { echo >&2 "\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting .git/hooks/pre-push.\n"; exit 2; }
    
    # LFSの確認とトラックしたファイルをpushする処理の間に入れています
    backup_remote '.gitの中身が置かれるパス' 'リモートのアドレス'
    
    git lfs pre-push "$@"
    
```
CC BY-SA 3.0
2017-06-14T01:36:40.943
35550
2017-06-14T01:36:40.943
14222
32222
answer