Aru*_*gal 1 git parallel-processing ssh github git-clone
好的。苹果系统。
alias gcurl
alias gcurl='curl -s -H "Authorization: token IcIcv21a5b20681e7eb8fe7a86ced5f9dbhahaLOL" '
echo $IG_API_URL
https://someinstance-git.mycompany.com/api/v3
Run Code Online (Sandbox Code Playgroud)
运行以下命令以查看:用户有权访问的所有组织的列表。 注意: 对于新用户(在此处仅传递 $IG_API_URL 将为您提供可以使用的所有 REST 端点)。
gcurl ${IG_API/URL}/user/orgs
Run Code Online (Sandbox Code Playgroud)
运行上面的代码给了我一个很好的 JSON 对象输出,我投入其中jq并获取了信息,最后现在我有了相应的 git url,我可以用它来克隆一个 repo。
我创建了一个主回购文件:
git@someinstance-git.mycompany.com:someorg1:some-repo1.git
git@someinstance-git.mycompany.com:someorg1:some-repo2.git
git@someinstance-git.mycompany.com:someorg2:some-repo1.git
git@someinstance-git.mycompany.com:someorgN:some-repoM.git
...
....
some 1000+ such entries here in this file.
Run Code Online (Sandbox Code Playgroud)
我创建了一个小的 oneliner 脚本(逐行阅读 - 我知道它是连续的但是)并运行 git clone ,它工作正常。
我讨厌并试图找到更好的解决方案是:
1)它是按顺序进行的,而且速度很慢(即一件接一件)。
2)我想在最大时间下克隆所有存储库,它需要最大的存储库来克隆。即如果回购 A 需要 3 秒,B 需要 20 秒,C 需要 3 并且所有其他回购需要不到 10 秒,那么我想知道是否有办法在20 -30 秒内快速克隆所有回购(相对于 3+20+3 +...+...+... 秒>分钟,这会很多)。
为了做同样的事情,我尝试在后台运行 git clone 步骤,以便我可以更快地迭代以读取这些行。
git clone ${git_url_line} $$_${datetimestamp}_${git_repo_fetch_from_url} &
Run Code Online (Sandbox Code Playgroud)
嘿,脚本很快就结束了,运行ps -eAf|egrep "ssh|git"显示正在运行一些有趣的东西。巧合的是,其中一个人喊道:) Incinga 显示出非常高的指标很酷。我以为是我的原因,但我想我可以做 N 不。git 从我的 GIT 实例克隆,而不会影响任何网络中断/奇怪的事情。
好的,事情成功运行了一段时间,我开始在屏幕上看到一堆 git clone 输出。在第二个会话中,我看到文件夹被填充得很好,直到我终于看到了我不期望的内容:
Resolving deltas: 100% (3392/3392), done.
remote: Total 5050 (delta 0), reused 0 (delta 0), pack-reused 5050
Receiving objects: 100% (5050/5050), 108.50 MiB | 1.60 MiB/s, done.
Resolving deltas: 100% (1777/1777), done.
remote: Total 10691 (delta 0), reused 0 (delta 0), pack-reused 10691
Receiving objects: 100% (10691/10691), 180.86 MiB | 1.57 MiB/s, done.
Resolving deltas: 100% (5148/5148), done.
remote: Total 5994 (delta 6), reused 0 (delta 0), pack-reused 5968
Receiving objects: 100% (5994/5994), 637.66 MiB | 2.61 MiB/s, done.
Resolving deltas: 100% (3017/3017), done.
Checking out files: 100% (794/794), done.
packet_write_wait: Connection to 10.20.30.40 port 22: Broken pipe
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
Run Code Online (Sandbox Code Playgroud)
我怀疑您一次启动约 1000 个进程会耗尽本地机器或远程机器上的资源。您可能想要限制启动的进程数。一种技术是使用xargs.
如果您有权访问 GNU xargs,它可能如下所示:
xargs --replace -P10 git clone {} < repos.txt
Run Code Online (Sandbox Code Playgroud)
-P10 是“10道工序”--replace- 用{}映射的参数替换如果您xargs在 osx 上使用残缺的 BSD (或想要更高的兼容性),您可以使用更便携的:
xargs -I{} -P10 git clone {} < repos.txt
Run Code Online (Sandbox Code Playgroud)
这种形式也适用于 GNU xargs
| 归档时间: |
|
| 查看次数: |
1273 次 |
| 最近记录: |