使用GitLab管理Android原始碼

2021-09-11 06:07:44 字數 4485 閱讀 8734

先在本地**倉庫建立預設分支

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可以賦予這個許可權 ...