首页 > 代码库 > 备份管理多个git项目
备份管理多个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_pro_backup位于/tmp下)
git clone /tmp/git_pro_backup git_pro cd git_pro gitrestore这样,你的所有git项目就都恢复到上一次你运行gitbr或gitbackup时的状态了。
有任何问题回复或q我:281754179
备份管理多个git项目
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。