複数gitプロジェクトのバックアップ管理
2524 ワード
複数のgitプロジェクトがある場合、これらのgitプロジェクトをフォルダに統一的にバックアップするにはどうすればいいですか?
1つの方法は、これらのgitプロジェクトを毎回cpコマンドで1つのフォルダにコピーすることです.このような問題は、次回のバックアップ時に面倒になるか、古いバックアップを削除するか、名前を変更するかです.
もう1つの良い方法はgitを使用してこれらのgitプロジェクトを管理することです.しかし、gitプロジェクトには、サブフォルダにある.gitディレクトリ、gitは自動的に無視されます.また、バックアップは完全なバックアップであるべきです.すなわちgitプロジェクト毎の.gitignoreのファイルもバックアップする必要があります.gitで管理すると、これらのファイルは無視されます.
そこで、これらの処理について、関数スクリプトを書いて処理しました.以下を参照してください.
使用法:この3つの関数をあなたのに加えます.bashrcまたは.zshrc、それからsourceをして、それを有効にします.次に、ディレクトリの下で次のコマンドを実行します.
これにより、gitプロジェクトはすべてバックアップされ、gitプロジェクトで無視されているファイルもバックアップされます.
gitプロジェクトに問題が発生してリカバリが必要になった場合は、次のコマンドを実行してリカバリできます(git_pro_backupが/tmpの下にあると仮定します).
これにより、gitプロジェクトはすべて前回gitbrまたはgitbackupを実行したときの状態に戻ります.
何か質問があったら返事してください.
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を実行したときの状態に戻ります.
何か質問があったら返事してください.