git学习--批量上传本地代码库到gerrit服务器---保留本地代码库所有分支和tag信息
来源:互联网 发布:unity3d 材质 编辑:程序博客网 时间:2024/06/10 22:53
本篇学习点:
1.gerrit服务器代码库建立
2.git命令使用
说明:此篇文章和repo批量创建远端仓库----建立自己的android代码仓库 的不同点在于,用本章方法可以将本地仓库的所有本地分支信息和tag信息完整的上传到gerrit代码库,而用repo批量创建远端仓库----建立自己的android代码仓库 这篇文章描述的方式则只是将本地代码当前HEAD位置上传为gerrit服务器的master分支,本地所有其他分支和tag信息都没有上传,无法切换到先前本地已有的分支和tag点。
使用背景:
1. 公司使用的gerrit服务器硬盘坏了,因此无法链接gerrit服务器,无法使用克隆裸仓库到本地然后重新在新服务器上提交的方法进行gerrit服务器迁移。那么问题来了,怎样将本地已经保存的一份代码原本的还原到新搭建的gerrit库上了。经过实践摸索,可以通过一个脚本实现,把所有本地仓库的代码(包括每一个仓库的所有本地分支信息和tag标签信息)全部上传到gerrit服务器。
2.这也是搭建新gerrit服务器后,然后上传新代码库的方法,完全保留了代码库的所有分支和标签信息。
实现方式:
通过一个脚本GitPushAllLocalReposityToGerrit.sh实现,此脚本放到android源码根目录下使用。脚本内容如下:
#BEGIN:
#####################################################################################
##将本地代码全部上传到gerrit服务器进行管理,包括每一个仓库的本地所有分支和tag
#####################################################################################
LOCAL_PATH=`pwd`
MANIFEST_XML_FILE=$LOCAL_PATH/.repo/manifest.xml
#项目各个仓库的前缀,用于区分多个项目仓
PROJECT_NAME_PREFIX="android-4.3_mirror"
#git用户名字,gerrit服务器ip,gerrit服务器端口
USER_NAME="yanxiangyfg"
SERVER_IP="172.26.13.71"
SERVER_PORT="29418"
#用repo命令时表示各个仓库的变量
REPO_PROJECT_STRING="\$REPO_PROJECT"
OUTPUT_PROJECT_LIST_FILE_NAME=$LOCAL_PATH/project_list_name
OUTPUT_PROJECT_LIST_FILE_PATH=$LOCAL_PATH/project_list_path
#从.repo/manifest.xml中获取各个仓的名字和路径
function getNameAndPath()
{
echo > $OUTPUT_PROJECT_LIST_FILE_NAME
echo > $OUTPUT_PROJECT_LIST_FILE_PATH
while read LINE
do
command_line=`echo $LINE | grep "<project"`
if [ "$command_line" ]
then
#echo $LINE
reposity_name_sec=${LINE#*name=\"}
reposity_path_sec=${LINE#*path=\"}
if [ "$reposity_name_sec" ] && [ "$reposity_path_sec" ]
then
reposity_name=${reposity_name_sec%%\"*}
reposity_path=${reposity_path_sec%%\"*}
echo "$reposity_name" >> $OUTPUT_PROJECT_LIST_FILE_NAME
echo "$reposity_path" >> $OUTPUT_PROJECT_LIST_FILE_PATH
fi
fi
done < $MANIFEST_XML_FILE
}
#在远程gerrit服务器建立各个仓
function creatEmptyGerritProject()
{
for i in `cat $OUTPUT_PROJECT_LIST_FILE_NAME`;
do
echo $i
echo "ssh -p $SERVER_PORT $USER_NAME@$SERVER_IP gerrit create-project -n $PROJECT_NAME_PREFIX/$i"
#在gerrit服务器创建空项目
ssh -p $SERVER_PORT $USER_NAME@$SERVER_IP gerrit create-project -n $PROJECT_NAME_PREFIX/$i
done
}
#推送本地仓库到服务器,包括本地仓库的所有branch分支信息和tag标签信息
function pushLocalReposityToRemote()
{
while read LINE
do
cd $LOCAL_PATH
command_line=`echo $LINE | grep "<project"`
if [ "$command_line" ]
then
#echo $LINE
reposity_name_sec=${LINE#*name=\"}
reposity_path_sec=${LINE#*path=\"}
if [ "$reposity_name_sec" ] && [ "$reposity_path_sec" ]
then
reposity_name=${reposity_name_sec%%\"*}
reposity_path=${reposity_path_sec%%\"*}
cd $LOCAL_PATH/$reposity_path
echo `pwd`
REMOTE_REPOSITY_NAME=`git remote`
ALL_LOCAL_BRANCHS=`git branch -a | grep "remotes/$REMOTE_REPOSITY_NAME"`
for branchLoop in `echo $ALL_LOCAL_BRANCHS`
do
BRANCH_NAME=${branchLoop#*$REMOTE_REPOSITY_NAME\/}
echo "------------local branch name is------------:$BRANCH_NAME"
#提交本地所以分支信息到远程分支
git push ssh://$USER_NAME@$SERVER_IP:$SERVER_PORT/$PROJECT_NAME_PREFIX/$reposity_name $branchLoop:refs/heads/$BRANCH_NAME
#提交本地所以tag信息到远程分支
git push --tag ssh://$USER_NAME@$SERVER_IP:$SERVER_PORT/$PROJECT_NAME_PREFIX/$reposity_name
done
fi
fi
done < $MANIFEST_XML_FILE
}
#调用函数执行建仓传代码的整个过程
getNameAndPath
creatEmptyGerritProject
pushLocalReposityToRemote
#END
- git学习--批量上传本地代码库到gerrit服务器---保留本地代码库所有分支和tag信息
- git查看本地和创建分支、上传分支、提交代码到分支、删除分支等
- git查看本地和创建分支、上传分支、提交代码到分支、删除分支等
- git查看本地和创建分支、上传分支、提交代码到分支、删除分支等,git分支
- git查看本地和创建分支、上传分支、提交代码到分支、删除分支等,git分支
- git 命令行实现建立本地库 第一次上传提交代码,生成分支,提交代码到该分支
- git 获取远程分支代码到本地
- git分支代码同步到本地
- git提交本地代码到新分支
- gitlab 创建分支,tag本地代码使用git命令无法查看到
- Git提交本地库代码到远程服务器的操作
- 将本地代码上传到github详解--git工具学习
- git 新建分支并提交本地代码到远程分支
- git上传本地代码
- git上传本地代码
- git 上传本地代码到github上
- Git 上传本地代码到github
- [Git]本地代码上传到github
- MyBatis魔法堂:Insert操作详解(返回主键、批量插入)
- 迁移学习资料汇总(Transfer Learning Open Source Software List)
- 扫描两个时间之间的多媒体文件
- elasticsearch-hadoop使用记录
- 【bzoj3207】花神的嘲讽计划Ⅰ hash
- git学习--批量上传本地代码库到gerrit服务器---保留本地代码库所有分支和tag信息
- 易百-大数据教程
- gcc 常用 参数
- http://blog.csdn.net/shimiso/article/details/21830313
- Java 可变参数,快速学习教程
- CFile::Write
- LEVEL1简体
- [译]Intel Threading Building Blocks 编程指南:任务调度
- 解决APP启动缓慢以及黑屏问题