当有多个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