先在本地**倉庫建立預設分支
repo start –all master
將當前倉庫的狀態儲存到輸出並且儲存到manifest.xml
repo manifest -r --suppress-upstream-revision -o ../manifest.xml
<?xml version="1.0" encoding="utf-8"?>
對於gitlab的遠端倉庫,ssh的url比如[email protected]:apq8009-android/example1.git,remote fetch url應該設定為ssh:而工程名project_name應該設定為example1。
在遠端伺服器新建manifest.git倉庫並且將上面生成的xml同步到伺服器。
注意在default專案中設定工程預設upstream,否則在repo start master --all後,自動將工程的upstream設定為revision,push的時候會產生新的分支
新建乙個工作目錄,並且新增乙個xml_parser.py指令碼,用於抓取manifest中的工程名,內容如下:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import unittest
import os
import time
from xml.dom.minidom import parse
import xml.dom.minidom
dom = xml.dom.minidom.parse('manifest.xml')
def get_data_value(tag, attriname):
nodelist = dom.getelementsbytagname(tag)
for node in nodelist:
attrivalue = node.getattribute(attriname)
print attrivalue
return
prj_name = get_data_value('project', 'name')
建立parser.sh指令碼,用於批量建立工程,內容如下:
#從manifest.xml中提取所有工程的name屬性
./xml_parser.py > name
#將name欄位切割成group和name
cat name | while read line
do echo $ >> project_group
done
#組名去重
sort -u project_group -o project_group
#獲得所有group和subgroup
cat project_group | while read line
do echo $ >> total_groups
if [[ $ =~ "/" ]];then
cur_line=$
while [[ $cur_line =~ "/" ]]
doecho $ >> total_groups
cur_line=$
done
echo $ >> total_groups
fidone
#組名再去重
sort -u total_groups -o total_groups
echo ' '
echo '****************************************'
echo ' '
echo 'creating gitlab groups and subgroups... '
echo ' '
echo '****************************************'
#通過gitlab api返回name或者path中包含group欄位的完整groups資訊,從json中找到full_path完全匹配的組對應的id
#函式中的echo會被作為返回值
function get_parent_group_id () #得到父節點路徑
search_group_name=$
curl -s "$/groups?private_token=$&search=$" | ./jq '.' >json_cache
./jq 'keys' json_cache>json_key
sed -i '1d' json_key
sed -i '$d' json_key
cat json_key | while read line
do full_path=`./jq ".[$].full_path" json_cache` #去除line中的逗號
if [ "$" == "$" ];then #刪除full_path的雙引號
group_id=`./jq ".[$].id" json_cache`
echo $
break
fidone
rm -f json_cache
rm -f json_key
}#獲得parent_id之後建立subgroup
cat total_groups | while read line
do #get_parent_group_id $
parent_id=$(get_parent_group_id $)
curl -sd "name=$&path=$&parent_id=$" "$/groups?private_token=$"
done
echo ' '
echo '***********************************===='
echo ' '
echo 'creating gitlab project in groups... '
echo ' '
echo '***********************************===='
#根據project_name和已經建立好的組,批量建立工程
cat name | while read line
do namespace_id=$(get_parent_group_id $)
curl -sd "name=$&path=$&namespace_id=$" "$/projects?private_token=$"
done指令碼中需要使用者實際情況修改private_token、server_url和parent_group變數的值。
將5.1中得到的manifest.xml複製到工作目錄,執行parser.sh即可完成工程建立。
刪除原有遠端倉庫位址並且新增新位址
repo remote rm ***
新增新遠端倉庫位址
repo remote add server [email protected]:apq8009-android/
或者使用forall命令
repo forall -cvp "git remote add midea [email protected]:apq8009-android/\$.git"
設定工程upstream並且推送到伺服器,對於現成的遠端倉庫,可以使用
repo forall -cvp "git fetch server "
repo forall -cvp "git branch -u server/*** caf"(***為現成遠端倉庫的已存在分支,caf為本地分支)
repo push --ignore_review
對於空的遠端倉庫,可以使用下面命令進行第一次推送,git自動設定upstream
repo forall -cvp "git push -u server localbranch:remotebranch"
gitlab分支管理
1.從master分支切換到dev分支進行開發 git checkout b dev master 從master分支建立dev開發分支 git branch 可以看到現在已經切換到dev分支了 vim readme 模擬在專案中修改 git add 把工作區中所有變更全部提交到 暫存區 git c...
GitLab使用者許可權管理
一 gitlab使用者許可權管理 gitlab使用者在組中有五種許可權 guest reporter developer master owner 2.reporter 可以轉殖 不能提交,qa pm可以賦予這個許可權 3.developer 可以轉殖 開發 提交 push rd可以賦予這個許可權 ...
GitLab使用者許可權管理
一 gitlab使用者許可權管理 gitlab使用者在組中有五種許可權 guest reporter developer master owner 2.reporter 可以轉殖 不能提交,qa pm可以賦予這個許可權 3.developer 可以轉殖 開發 提交 push rd可以賦予這個許可權 ...