Giter Site home page Giter Site logo

yikun / hub-mirror-action Goto Github PK

View Code? Open in Web Editor NEW
608.0 8.0 162.0 135 KB

一个Github Action,用于在Github和Gitee之间同步代码。Action for mirroring repos between Hubs (like Github and Gitee).

License: MIT License

Dockerfile 1.58% Shell 6.37% Python 92.05%

hub-mirror-action's Introduction

Hub Mirror Action

简体中文 | English

一个用于在hub间(例如Github,Gitee)账户代码仓库同步的action

用法

steps:
- name: Mirror the Github organization repos to Gitee.
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/kunpengcompute
    dst: gitee/kunpengcompute
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    account_type: org
    # src_account_type: org
    # dst_account_type: org

上面的配置完成了kunpencompute组织从github到gitee的同步,你可以在测试和demo找到完整用法。

有疑问、想法、问题、建议,可以通过Gitter找到我们。

谁在使用?

超过100+组织,4000+使用者正在使用,50+来自使用者的使用教程:

参数详解

必选参数

  • src 需要被同步的源端账户名,如github/kunpengcompute,表示Github的kunpengcompute账户。
  • dst 需要同步到的目的端账户名,如gitee/kunpengcompute,表示Gitee的kunpengcompute账户。
  • dst_key 用于在目的端上传代码的私钥(默认可以从~/.ssh/id_rsa获取),可参考生成/添加SSH公钥generating SSH keys生成,并确认对应公钥已经被正确配置在目的端。对应公钥,Github可以在这里配置,Gitee可以这里配置。
  • dst_token 创建仓库的API tokens, 用于自动创建不存在的仓库,Github可以在这里找到,Gitee可以在这里找到。

可选参数

  • account_type 默认为user,源和目的的账户类型,可以设置为org(组织)或者user(用户),该参数支持同类型账户(即组织到组织,或用户到用户)的同步。如果源目的仓库是不同类型,请单独使用src_account_typedst_account_type配置。
  • src_account_type 默认为account_type,源账户类型,可以设置为org(组织)或者user(用户)。
  • dst_account_type 默认为account_type,目的账户类型,可以设置为org(组织)或者user(用户)。
  • clone_style 默认为https,可以设置为ssh或者https。当设置为ssh时,你需要将dst_key所对应的公钥同时配置到源端和目的端。
  • cache_path 默认为'', 将代码缓存在指定目录,用于与actions/cache配合以加速镜像过程。
  • black_list 默认为'', 配置后,黑名单中的repos将不会被同步,如“repo1,repo2,repo3”。
  • white_list 默认为'', 配置后,仅同步白名单中的repos,如“repo1,repo2,repo3”。
  • static_list 默认为'', 配置后,仅同步静态列表,不会再动态获取需同步列表(黑白名单机制依旧生效),如“repo1,repo2,repo3”。
  • force_update 默认为false, 配置后,启用git push -f强制同步,注意:开启后,会强制覆盖目的端仓库
  • debug 默认为false, 配置后,启用debug开关,会显示所有执行命令。
  • timeout 默认为'30m', 用于设置每个git命令的超时时间,'600'=>600s, '30m'=>30 mins, '1h'=>1 hours
  • mappings 源仓库映射规则,比如'A=>B, C=>CC', A会被映射为B,C会映射为CC,映射不具有传递性。主要用于源和目的仓库名不同的镜像。
  • lfs 提供git lfs支持, 默认为false, 配置为true后,调用git lfs fetch --allgit lfs push --all进行同步。

举些例子

组织同步

同步Github的kunpengcompute组织到Gitee

- name: Organization mirror
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/kunpengcompute
    dst: gitee/kunpengcompute
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    account_type: org

黑/白名单

动态获取源端github/Yikun的repos,但仅同步名为hub-mirror-action,不同步hashes这个repo到Gitee

- name: Single repo mirror
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/Yikun
    dst: gitee/yikunkero
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    white_list: "hub-mirror-action"
    black_list: "hashes"

静态名单(可用于单一仓库同步)

不会动态获取源端github/Yikun的repos,仅同步hub-mirror-action这个repo

- name: Black list
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/Yikun
    dst: gitee/yikunkero
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    static_list: "hub-mirror-action"

clone方式

使用ssh方式进行clone

说明:请把dst_key所的公钥配置到源端(在这里为github)及目的端(在这里为gitee)

- name: ssh clone style
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/Yikun
    dst: gitee/yikunkero
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    clone_style: "ssh"

指定目录cache

- name: Mirror with specific cache
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/Yikun
    dst: gitee/yikunkero
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    cache_path: /github/workspace/hub-mirror-cache

强制更新,并打开debug日志开关

- name: Mirror with force push (git push -f)
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/Yikun
    dst: gitee/yikunkero
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    force_update: true
    debug: true

设置命令行超时时间为1小时

- name: Mirror with force push (git push -f)
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/Yikun
    dst: gitee/yikunkero
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    force_update: true
    timeout: '1h'

仓库名不同时同步(github/yikun/yikun.github.com to gitee/yikunkero/blog)

- name: mirror with mappings
  uses: Yikun/hub-mirror-action@mappings
  with:
    src: github/yikun
    dst: gitee/yikunkero
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    mappings: "yikun.github.com=>blog"
    static_list: "yikun.github.com"

仅同步非fork且非private的仓库

- name: Get repository list exclude private and fork
  id: repo
  uses: yi-Xu-0100/[email protected]
- name: Mirror repository list exclude private and fork
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/Yikun
    dst: gitee/yikunkero
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    static_list: ${{ steps.repo.outputs.repoList }}

支持LFS同步

- name: Mirror with lfs (git lfs fetch/push --all)
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/Yikun
    dst: gitee/yikunkero
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    lfs: true

FAQ

  • 如何在secrets添加dst_token和dst_key? 下面是添加secrets的方法,也可以参考secrets官方文档了解更多:
    1. 获取Token和Key,分别获取ssh keytoken
    2. 增加Secrets配置,在配置仓库的Setting-Secrets中新增Secrets,例如GITEE_PRIVATE_KEY、GITEE_TOKEN
    3. 在Workflow中引用, 可以用过类似${{ secrets.GITEE_PRIVATE_KEY }}来访问

参考

最后

如果觉得不错,来个star支持下作者吧!你的Star是我更新代码的动力!:)

想任何想吐槽或者建议的都可以直接飞个issue.

hub-mirror-action's People

Contributors

adoshan avatar alafun avatar gotlin avatar kareemzarka avatar liyipeng3 avatar ouuan avatar snowyu avatar thenetadmin avatar yi-xu-0100 avatar yihong0618 avatar yikun avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hub-mirror-action's Issues

删除默认分支后,从 cache 中无法成功拉取

image

由于我的 GitHub 的仓库删除了默认仓库,但是 Gitee 中也是默认仓库,同步后,无法完成删除操作,但是似乎由于顺序问题,对于其他分支的同步也无法完成。

我在 Gitee 上,无法找到 main 分支,也就没法切换默认分支,来完成重新同步。

我记得在 #39 中我提到了相关顺序问题,现在发现并不一定能够保证新建分支的顺利完成,是否后面会支持保证完成分支建立的过程?

GitHub 地址: https://github.com/yi-Xu-0100/Learn-for-coding
Gitee 地址: https://gitee.com/yiXu0100/Learn-for-coding

PS: 我已经使用 v0.11 的版本,#39指代的链接定位的文件发生了变化,我也不知道当时所指代的位置了。

Add acoount type support

Current, only org account type repo sync is supported, but the user account type is not suported.

We can add an is_org (False by default) add a account_type (can be set to user or org, user by default) to get/list the repos from user account or org account.

The org sync:

steps:
- name: Mirror the Github organization repos to Gitee.
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/kunpengcompute
    dst: gitee/kunpengcompute
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token:  ${{ secrets.GITEE_TOKEN }}
    account_type: org

The user sync:

steps:
- name: Mirror the Github organization repos to Gitee.
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/xxx
    dst: gitee/xxx
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token:  ${{ secrets.GITEE_TOKEN }}

仓库的 commit 记录被修改后无法成功从 cache 文件夹拉取最新记录

Backup learn-scripts ...
(0/3) Downloading...
Create non-exist repo...
fatal: remote gitee already exists.
Remote already exists.
(1/3) Updating...
From https://github.com/yi-Xu-0100/learn-scripts
 + c31e8a4...f4173f2 main       -> origin/main  (forced update)

*** Please tell me who you are.

Run

  git config --global user.email "[email protected]"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

同一个任务中的其他仓库能够完成备份。

任务链接:https://github.com/yi-Xu-0100/hub-mirror/runs/1525624122

更多可能的信息,该仓库是本地新建的并初始化的。然后添加 GitHub 仓库为远程库,并推送到 GitHub 中。

最开始的几次记录时成功备份的。

错误记录从,我有一次使用 rebase 命令修改了最后一次的 commit 描述,并强制同步到 GitHub 中。

可以看出,同步该仓库时,GitHub 强制拉取最新更新出现问题。

你在用“hub-mirror-action”吗?快来报道啦!

有细心的同学已经发现,项目的主页加上了:

谁在使用?

参考

的内容。

你也在用"hub-mirror-action"吗?

如果你也在用hub-mirror-action的话,欢迎在此留言,内容不限,我会定期将反馈的信息同步到Readme!

或者,你也可以联系我的微信:yikunkero,我们把你拉到“hub-mirror-action”的交流群里。

请教下

dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
dst_token:  ${{ secrets.GITEE_TOKEN }}

这两个有区别吗?是不是只要设置一个 dst_token: ${{ secrets.GITEE_TOKEN }} 就可以啊,另外我想同步账户下的某一个repo ,是不是不可以啊 ?例如,执行不成功
steps:
- name: Hub Mirror Action.
uses: Yikun/[email protected]
with:
src: github/yfdoor/OpenWrt-CI
dst: gitee/yfdoor/OpenWrt-CI
# dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
dst_token: ${{ secrets.GITEE_TOKEN }}

cache 使用更新

根据我对 cache action 的调查,当前仓库的使用方式,会每次触发第一次备份的结果,造成后续的结果并不会被 cache,所以我建议替换为时间关键词作为触发条件,第一次建立后,之后的结果应该会使用最近一次的结果,这样能够更好的使用cache。

详细介绍见:actions/cache 的使用方法

cache 的缓存由于关键词固定,仅缓存了第一次的结果

我的仓库 中,最近几次的镜像同步中,gpg 验证没有传递成功。
结果可见:https://gitee.com/yiXu0100/hub-mirror/commits/main
中间我以为是我在未配置 cache_path,错误使用了参数的原因,后来验证不是,而且我的参数与默认参数一致,应该不会有影响。

我本以为我验证了相关的触发条件,但是一直没有触发。包括在新的仓库中,我验证了相关的条件,仍然是都传递成功。
见:https://github.com/yi-Xu-0100/test/actions 结果见:https://gitee.com/yiXu0100/test/commits/hubtest

更可怕的是我发现,由于 cache 的存在,由于键值相同的问题,它只缓存了第一次的结果,如果是cache版本完成同步,会造成部分 tag 丢失的问题。
可能 cache 的引入,缓存可能对多个方面有影响。

Improve the exception processing

If the substep is error, give user a friendly exit to stop the action.

  • 如果没有权限,发现${INPUT_DST_KEY}、DST_TOKEN为空时,直接退出
  • git操作失败,直接退出

发布 Hub Mirror Action v0.10版本!

  • 分页支持。解决由于仓库数目过多,导致的无法同步全量同步,#21
  • 改善退出机制。如果一个repo同步失败,会继续尝试同步其他repos,在最后退出,并打印总结。#41
  • 完善文档。

这个版本没有引入新的参数,以加固为主的版本!可以作为稳定版使用!

About dst_token and dst_key

目前这个项目是只支持账户间的同步吗,有计划做成支持账户下某个repo 的同步吗?
还有就是关于 dst_token 和dst_key 的问题,还是需要请教下:
我看demo 中的示例只需要填写目的端 gitee 的 token 和 key

token:我可以在 gitee 生成一个私人令牌 https://gitee.com/profile/personal_access_tokens ,然后需要把他添加到gihub 的哪里呢? 不会是某个 repo setting 中的Secrets 下吧,难道要在所有的 repo setting 里都添加?
ssh key:我了解这个是用来让 github 连接 gitee 的 ,可是如何生成 gitee 的 公钥呢, 这里https://gitee.com/profile/sshkeys 只能添加外部连接 gitee 的 ssh key,可是如何生成 gitee 自己的 key 添加到 gihub 里呢?
不好意思,可能问题有些太基础了,可是还是不太了解,谢谢

Feature: Repo auto create.

Now we only support mirror the commits and branches to destination org, but if the repo doesn't exists, will failed.

We should add the repo auto create support, there is a arg should be added:

  • dst_token, we need add dst_token arg to make the aciton have rights to create repo in destination account.

无法删除分支时保证同步完成后抛出错误

我 在github 上更换了主分支,并删除了主分支,由于原先有同步问题,此时造成 action 无法删除 gitee 的主分支的问题,需要手动到 gitee 上切换默认分支,并手动删除,不知道能否能够实现自动化,还是说,这个切换默认分支的问题,只能通过网页端确认。

发布 Hub Mirror Action v0.11版本!

- 新增timeout参数 #75

- name: Mirror with force push (git push -f)
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/Yikun
    dst: gitee/yikunkero
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    force_update: true
    timeout: '600s'

用户可以通过timeout设置git指令的超时时间,超时后立即失败,默认值为600,即10分钟认为指令超时,从而避免一个指令卡主导致的任务超时。

- 新增重试机制 #76

在指令超时后,重试3次,大多数重试其实是由于指令卡主引起的,所以,超时后进行重试,可以解决大部分问题。

- 其他

  • Test: 改善cache场景的用例 #59 #61 #68 :以类似Linux-yikun-hub-cache-20201015112223272作为cache的key,然后Linux-yikun-hub-cache-作为恢复key,这样可以保证恢复可以按照timestmp,逐次增量缓存 感谢 @yi-Xu-0100

  • Bugfix: 目的端检查仓库是否存在的分页支持。#71

  • Log:清空创建仓库时的冗余日志 #72

无法匹配已经创建的仓库

当前的匹配语句是匹配多行,但是 echo 打印的内容并不是多行,使用 grep -Fx 造成无法匹配到已经创建的仓库。造成每次都会创建一次,虽然可能提示已经创建而不会有报错退出。

function create_repo
{
# Auto create non-existing repo
has_repo=`echo $DST_REPOS | grep -Fx $1 | wc -l`
if [ $has_repo == 0 ]; then
echo "Create non-exist repo..."
if [[ "$DST_TYPE" == "github" ]]; then
curl -s -H "Authorization: token $2" --data '{"name":"'$1'"}' $DST_REPO_CREATE_API > /dev/null
elif [[ "$DST_TYPE" == "gitee" ]]; then
curl -s -X POST --header 'Content-Type: application/json;charset=UTF-8' $DST_REPO_CREATE_API -d '{"name": "'$1'","access_token": "'$2'"}' > /dev/null
fi
fi
git remote add $DST_TYPE git@$DST_TYPE.com:$DST_ACCOUNT/$1.git || echo "Remote already exists."
}

能否提供设置以便不同步 fork 的仓库

其实我只是想将我的个人创建的仓库同步过去,但是 fork 的仓库太多了,自己创建的也挺多的。

能不能直接设置参数,不同步 fork 的仓库,这样我的名单能够短点,只需要排除1-2个私有仓库。

对喽,如果这样可行的话,自行创建的私有仓库的,希望能够判断出来后直接跳过,给出 warning 即可,最好在文档中说明暂时无法同步。(#38 的问题就可以暂时避免)

Feature: Mirror direction support.

Now we only support mirror the Github to Gitee, we can also support github to gitee.

Plan A

steps:
- name: Do mirror operation between Github and Gitee.
  uses: Yikun/gitee-mirror-action@master
  with:
    private_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    github_to_gitee: False # should be added
    github_org: kunpengcompute
    gitee_org: kunpengcompute

We could add a github_to_gitee arg to make the sync direction can be set flexiablely.

  • If github_to_gitee is True (default), will mirror github to gitee.
  • else github_to_gitee is False, will mirror gitee to github,

Plan B

Make the action more generic, looks like:

steps:
- name: Do hub mirror operation from Github to Gitee.
  uses: Yikun/gitee-mirror-action@master
  with:
    dst_key: ${{ secrets.GITHUB_PRIVATE_KEY }}
    dst: github/kunpengcompute
    src: gitee/kunpengcompute

destination_key: the private key to push code into dst repos.
destination: {hub_type}/{org/user_name}, hub_type support gitee, github
source: {hub_type}/{org/user_name}, hub_type support gitee, github

And after that, we could rename the action name from "gitee mirror action" to "hub mirror action", hub is represented for gitee/github...

Operation timed out 能否优化流程

有时会触发 Operation timed out, 造成同步失败,是否能够对此也提示 warning,并对结果设置通过,一般这种第二天同步会没有问题,但是偶尔地触发显得这个是有 bug 一样。排查之后却发现只是请求失败了。

或者对该仓库的同步在最后重新请求一遍,如果两次都不通过,则设置失败。

见: https://github.com/yi-Xu-0100/hub-mirror/runs/1316299550

怎样配置公钥?

我想将 GitHub 仓库同步到 Gitee 上,但容器中 Push 代码报出无权限问题。我看到它使用的是容器 root 的公钥,很奇怪。我已经在GitHub 仓库中配置了说明中的密钥

image

image

也检查过可以连接。

wsx@zd:~$ ssh git@gitee.com
The authenticity of host 'gitee.com (212.64.62.174)' can't be established.
ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitee.com,212.64.62.174' (ECDSA) to the list of known hosts.
Hi 王诗翔! You've successfully authenticated, but GITEE.COM does not provide shell access.
Connection to gitee.com closed.

问题出在容器没有使用我提供的公钥,是我配置哪里有问题吗?

祝好,
诗翔

Add white list support

Only enable the specific repos synchronization

steps:
- name: Mirror the Github organization repos to Gitee.
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/kunpengcompute
    dst: gitee/kunpengcompute
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token:  ${{ secrets.GITEE_TOKEN }}
    # Only enable the repo1 and the repo2 sync
    white_list: 
        - repo1
        - repo2

Improve the mirror exit

As the discussion in #39, the mirror action should not be break by single project error, we should continue to mirror other left project, and give a friedly exit in the final stage.

And we should also print some mirror summary in there.

同步空仓库会暂停同步过程

我似乎有个老旧的空仓库,MyWiki,在同步过程中报错并直接退出。

(1/3) Updating...
Your configuration specifies to merge with the ref 'refs/heads/master'
from the remote, but no such ref was fetched.
Update failed
(2/3) Importing...
load pubkey "/root/.ssh/id_rsa": invalid format
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
Connection to gitee.com closed by remote host.
error: failed to push some refs to '[email protected]:yiXu0100/MyWiki.git'
 Push failed 

链接: https://github.com/yi-Xu-0100/hub-mirror/runs/1252957338

能否支持设置只同步某些分支

例如:

steps:
- name: Mirror the Github organization repos to Gitee.
  uses: Yikun/hub-mirror-action@master
  with:
    # ...
    # 默认同步所有分支,如果设置branches,则同步以逗号分割的分支
    branches: 'a,b'

Gitee同步失败

我用github做镜像仓库,用gitee做主仓库,怎么用action定时触发同步从gitee拉取到github,用你的action我没有配置好,出现错误了

2020-09-01T08:26:45.7736441Z �[31m(2/3)�[0m Importing...
2020-09-01T08:26:45.7822264Z load pubkey "/root/.ssh/id_rsa": invalid format
2020-09-01T08:26:45.8026664Z Warning: Permanently added 'github.com,140.82.114.3' (RSA) to the list of known hosts.
2020-09-01T08:26:46.2317529Z To github.com:codingriver/hugo-project.git
2020-09-01T08:26:46.2318579Z ! [rejected] origin/master -> master (fetch first)
2020-09-01T08:26:46.2319607Z error: failed to push some refs to '[email protected]:codingriver/hugo-project.git'

配置:
2020-09-01T08:26:36.0366725Z ##[group]Run Yikun/hub-mirror-action@master
2020-09-01T08:26:36.0367327Z with:
2020-09-01T08:26:36.0367713Z src: gitee/codingriver
2020-09-01T08:26:36.0368027Z dst: github/codingriver
2020-09-01T08:26:36.0370476Z dst_key: ***

2020-09-01T08:26:36.0370864Z dst_token: ***
2020-09-01T08:26:36.0371173Z white_list: hugo-project
2020-09-01T08:26:36.0371486Z account_type: user
2020-09-01T08:26:36.0371994Z clone_style: https
2020-09-01T08:26:36.0372336Z cache_path: /github/workspace/hub-mirror-cache
2020-09-01T08:26:36.0372670Z force_update: false
2020-09-01T08:26:36.0372976Z debug: false
如果支持,麻烦楼主给指点下,[email protected]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.