lindabell 发表于 2021-12-11 22:14:04

有没有方法一次性下载gitee所有仓库

现在把很多项目放在gitee中,总是担心那天挂了,项目都没有了。
找一个定期把账户下的仓库全部克隆下来。

shawn_bu 发表于 2021-12-11 22:15:55

自己的就先全部clone下来,然后写个脚本定期pull就行了。

wye11083 发表于 2021-12-11 22:16:30

为什么不自己建个git或svn。。

lindabell 发表于 2021-12-12 01:19:16

shawn_bu 发表于 2021-12-11 22:15
自己的就先全部clone下来,然后写个脚本定期pull就行了。

脚本已经有了,有时在公司建立了仓库忘记在自己电脑克隆下来;就想有没有方法可以自动检测账户的仓库,自动下载同步所有的;没有在本地的也同步下来。

下面是目前使用的同步脚本

import os
import sys

#列出当前目录下所有一级文件夹
def dirpathlist(lpath,outlist):
    filelist = os.listdir(lpath)
    for f in filelist:
      filename = os.path.join(lpath, f)
      if os.path.isdir(filename+"\\.git"):
            outlist.append(filename)
    return outlist

#执行git更新
def git_update(path):
    cmd ="git -C "+path+" fetch --all"
    #print(cmd)
    os.system(cmd)


if __name__ == '__main__':
    outlist = dirpathlist(sys.path,[])
    #print(outlist)
    for f in outlist:
      print('fetch {}'.format(f))
      git_update(f)

2nd 发表于 2021-12-12 22:45:00

你的担心我也有过,可以考虑选Coding.net做备选,都是大企业。

lindabell 发表于 2021-12-13 14:18:00

找了一圈没有合适的,就自己写了一个;新鲜出炉的,还热乎。

打开地址 https://gitee.com/api/v5/swagger#/getV5UserRepos,点击右上角授权获得授权码




把上面的授权码替换掉py中的授权码,运行就可以下载全部的仓库了。


import requests
import json
import jsonpath
import os

access_token="123456789xxxxxxxxxxx"
local_folder="D:\\gitee\\"

if __name__ == "__main__":
    pre_url="https://gitee.com/api/v5/user/repos?access_token="+access_token+"&visibility=all&sort=full_name&direction=asc&page="
    page=0
    while True:
      page+=1
      print(" ")
      print("repo %d" %(page))
      URL=pre_url+str(page)+"&per_page=1"   
      res = requests.get(URL)
      d=json.loads(res.text)
      if d==[]:
            break
      folder=jsonpath.jsonpath(d,"$..namespace.path")
      proj_name=jsonpath.jsonpath(d,"$.0.name")
      ssh_url=jsonpath.jsonpath(d,"$..ssh_url")

      path=local_folder+folder+"\\"+proj_name
      #print("path: %s" %(path))
      print("ssh url:%s" %(ssh_url))

      # is repo exsit
      if os.path.exists(path+"\\.git"):
            git_cmd="git -C "+path+" fetch --all "
            #print(git_cmd)
            os.system(git_cmd)
      else:
            git_cmd="git clone "+ssh_url+" "+path
            #print(git_cmd)
            os.system(git_cmd)

页: [1]
查看完整版本: 有没有方法一次性下载gitee所有仓库