备份管理多个git项目

当有多个git项目时应该怎么让这几个git项目都统一备份到某个文件夹中呢?

一个方法是将这些git项目每次都用cp命令拷贝到一个文件夹中,这样存在的问题是,下次备份时就麻烦了,要么删掉旧备份,要么重命名。

另一个较好的方法是用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;
}

用法:把这三个函数加入你的.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时的状态了。

有任何问题回复或q我:281754179

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值