-
在搭建 devops 平臺時有一個小功能是獲取倉庫的分支或者標籤列表,遂使用 python 寫了相關指令碼
-
python 安裝包
GitPython
並且import git
-
相關指令碼
# 倉庫操作物件
def get_repo_target(self, addr):
#取倉庫地址作為目錄名
repo_name = addr.replace('/', '-')
try:
#在特定目錄獲取倉庫操作物件
repo = git.Repo(self.temp_dir + repo_name)
#設定git拉取程式碼身份驗證使用的私鑰地址,剛開始使用GIT_SSH引數,值為私鑰地址不起作用
repo.git.update_environment(
GIT_SSH_COMMAND='ssh -i ' + self.get_key_path(addr))
Debug.info('已經存在倉庫:' + addr)
except Exception as e:
Debug.info('未初始化倉庫')
Debug.error(str(e))
Debug.info('初始化倉庫')
#未初始化過倉庫,在特定目錄初始化倉庫操作物件
repo = git.Repo.init(self.temp_dir + repo_name)
Debug.info('新增遠端倉庫')
repo.create_remote('origin', addr)
Debug.info('fetch遠端倉庫資料')
try:
#獲取倉庫最新資訊
repo.git.fetch('--all')
except Exception as e:
Debug.info('fetch倉庫資料資訊失敗')
Debug.error(str(e))
return repo
這裡可能還要執行一下命令 mkdir /root/.ssh && echo 'StrictHostKeyChecking no' > /root/.ssh/config
, 要不然在初次獲取倉庫主機資訊時有個known_hosts的互動確認,這裡是免互動確認
- 獲取分支指令碼
# 獲取倉庫分支
def get_branches(self, address):
repo = self.get_repo_target(address)
Debug.info('獲取遠端分支資訊')
branches = repo.git.branch('-r')
branches = branches.split("\n")
Debug.info(branches)
filter_branches = []
#這裡去除 origin
for item in branches:
pos = item.find('/')
filter_branches.append(item[pos+1:])
return filter_branches
- 獲取標籤列表
# 獲取倉庫tag def get_tags(self, address): repo = self.get_repo_target(address) Debug.info('獲取tag資訊') #獲取標籤及標籤提交資訊 tags = repo.git.tag('-ln') filter_tags = [] tags = tags.split("\n") Debug.info(tags) #分享標籤和標籤提交資訊,這裡發現標籤提交時如果未加 -m,會使用上次使用的提交資訊 for item in tags: pos = item.find(" ") tag_temp = {"name": item[:pos], "msg": item[pos:].strip()} filter_tags.append(tag_temp) return filter_tags
本作品採用《CC 協議》,轉載必須註明作者和本文連結