複数gitプロジェクトのバックアップ管理

2524 ワード

複数のgitプロジェクトがある場合、これらのgitプロジェクトをフォルダに統一的にバックアップするにはどうすればいいですか?
1つの方法は、これらのgitプロジェクトを毎回cpコマンドで1つのフォルダにコピーすることです.このような問題は、次回のバックアップ時に面倒になるか、古いバックアップを削除するか、名前を変更するかです.
もう1つの良い方法はgitを使用してこれらのgitプロジェクトを管理することです.しかし、gitプロジェクトには、サブフォルダにある.gitディレクトリ、gitは自動的に無視されます.また、バックアップは完全なバックアップであるべきです.すなわちgitプロジェクト毎の.gitignoreのファイルもバックアップする必要があります.gitで管理すると、これらのファイルは無視されます.
そこで、これらの処理について、関数スクリプトを書いて処理しました.以下を参照してください.
#  git 
function gitbackup()
{
    [ $# = 0 ] && new_cwd='.' || new_cwd=$1
    [ ! -d $new_cwd/.git ] && echo "Not a git repository!" && return 1

    suffix='lep'
    gitbackup=".gitbak.$suffix"
    old_cwd=`pwd`
    cd $new_cwd || return 1

    for dir in `ls`
    do
        if [ -d $dir/.git ]; then
            #  
            for f in `find $dir -name '.gitignore'`
            do
                mv -f $f $f.$suffix
            done
            rm -rf $dir/$gitbackup
            mv $dir/.git $dir/$gitbackup
        fi
    done

    git add -A
    git commit -m 'backup git project'
    git config push.default current
    git push

    echo 'backup git project success!'
    cd $old_cwd
    return 0
}

#  git 
function gitrestore()
{
    [ $# = 0 ] && new_cwd='.' || new_cwd=$1
    [ ! -d $new_cwd/.git ] && echo "Not a git repository!" && return 1

    suffix='lep'
    gitbackup=".gitbak.$suffix"
    old_cwd=`pwd`
    cd $new_cwd || return 1

    for dir in `ls`
    do
        if [ -d $dir/$gitbackup ]; then
            mv $dir/$gitbackup $dir/.git
        fi
        #  ignore 
        for f in `find $dir -name .gitignore.$suffix`
        do
            mv -f $f `dirname $f`/.gitignore
        done
    done

    echo 'restore git project success!'
    cd $old_cwd
    return 0
}

#  
function gitbr()
{
    gitbackup  $1
    gitrestore $1
    return 0;
}

使用法:この3つの関数をあなたのに加えます.bashrcまたは.zshrc、それからsourceをして、それを有効にします.次に、ディレクトリの下で次のコマンドを実行します.
git init --bare git_pro_backup
git clone git_pro_backup git_pro
cd git_pro
git clone  git 
git clone  git 
...
gitbr   gitbr .

これにより、gitプロジェクトはすべてバックアップされ、gitプロジェクトで無視されているファイルもバックアップされます.
gitプロジェクトに問題が発生してリカバリが必要になった場合は、次のコマンドを実行してリカバリできます(git_pro_backupが/tmpの下にあると仮定します).
git clone /tmp/git_pro_backup git_pro
cd git_pro
gitrestore

これにより、gitプロジェクトはすべて前回gitbrまたはgitbackupを実行したときの状態に戻ります.
何か質問があったら返事してください.